Dropwizard / JerseyClient игнорировал JsonProperty при отправке http-запроса
У меня есть две службы REST, реализованные с Dropwizard-0.8. Оба разделяют зависимость API со следующими POJO:
public class Report{
private String text;
@JsonProperty("t")
public String getText()
{
return text;
}
public void setText(String tx)
{
text = tx;
}
}
Мой сервер имеет ресурс отдыха:
@POST
@Consumes(MediaType.APPLICATION_JSON + ";charset=UTF-8")
@Produces(MediaType.TEXT_PLAIN + ";charset=UTF-8")
@Timed
public Response receive(Report dto) {
//do some stuff with dto
}
У моего клиента есть метод:
sendReport(report);
с:
private void sendReport(Report report) {
final String uri = "http://localhost:8080/.....";
Response response = null;
try {
response = client.target(uri).request().post(Entity.entity(report, MediaType.APPLICATION_JSON), Response.class);
final int status = response.getStatus();
if (status != Status.ACCEPTED.getStatusCode()) {
final StatusType statusInfo = response.getStatusInfo();
throw new SomeException();
}
}
catch (Exception e) {
LOGGER.error(e.getMessage());
}
finally {
if (response != null) {
response.close();
}
}
}
Клиент сделан в классе приложения Dropwizard с:
service.client = new JerseyClientBuilder(env).using(conf.getJerseyClient()).withProvider(JacksonJaxbJsonProvider.class).build(getName());
env.jersey().register(service);
Где "service" - мой класс отдыха, вызывающий метод "sendReport".
проблема
Когда я вызываю службу покоя моего сервера из браузера или с помощью curl и т. Д., Она работает отлично, как и ожидалось, со следующим messagebody:
{"t": "некоторый текст для сервера"}
Но когда я запускаю свое приложение для вызова остальной службы, я получаю 400 "неспособных обработать JSON". Отладка и сообщения журнала показали, что приложение отправляет следующий JSON на мой сервер:
{"текст": "некоторый текст для сервера"}
Что приводит к ошибке, что Джексон не может найти свойство "текст".
Почему JerseyClient игнорирует аннотацию JsonProperty?
1 ответ
Из того, что я понимаю, вы используете Entity.entity из Джерси, который не имеет представления о аннотации @JsonProperty (которая из библиотеки Джексона) . Что вам нужно сделать, это выполнить сериализацию с использованием библиотеки Джексона и передать ее после вызова.