Сервер Java Jersey не получает параметры POST
Я использую Java Jersey на стороне сервера, и я использую @BeanParam для сбора параметров POST через JSON, но класс @BeanParam просто не получает их.
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 с Бобом.Использование
@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) {
Вам нужно аннотировать поля класса, который вы хотите создать с помощью
@FormParamаннотации:public class SyncRequestParams { @FormParam("id") private int id; }Смотрите более подробное объяснение здесь