Сервер 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; }
Смотрите более подробное объяснение здесь