2016-03-09 3 views
2

Я использую Java-Джерси на стороне сервера, и я использую @BeanParam для сбора параметров POST через JSON, но класс @BeanParam просто не получает их.Сервер Java Jersey не получает параметры POST

API-интерфейс:

@POST 
@Produces({MediaType.APPLICATION_JSON}) 
@Consumes({MediaType.APPLICATION_JSON}) 
public Response sync(@BeanParam SyncRequestParams request) { 
     ......... 
} 

Класс @BeanParam:

@Data 
@JsonIgnoreProperties(ignoreUnknown = true) 
public class SyncRequestParams { 
    @JsonProperty("id") 
    private int id; 
} 

Так, если клиент отправляет JSON как:

{ 
    "id": 12345 
} 

В SyncRequestParams будет по-прежнему иметь идентификатор, как 0 , а не 12345

Что я здесь не делал?

Благодаря IS

ответ

2

@BeanParam не могут быть использованы для отображения полезная нагрузка JSON для компонента.

Using@BeanParam требует полей фасоли быть аннотированные с JAX-RS Param аннотациями (@FormParam, @QueryParam и т.д.). Затем среда выполнения создает компонент и заполняет поля значениями параметров. Так как ваш id не имеет параметра аннотацию (и запрос не содержит такого параметра) все равно 0.

Что вы хотите, что JSON полезной нагрузки запроса POST обрабатывается на экземпляр SyncRequestParams и, следовательно, вы должны просто напишите

@POST 
@Produces({MediaType.APPLICATION_JSON}) 
@Consumes({MediaType.APPLICATION_JSON}) 
public Response sync(SyncRequestParams request) { 
1

вам нужно аннотирования поля класса вы хотите, генерируемый @FormParam аннотацию:

public class SyncRequestParams { 
    @FormParam("id") 
    private int id; 
} 

увидеть более подробное объяснение here

Смежные вопросы