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 (которая из библиотеки Джексона) . Что вам нужно сделать, это выполнить сериализацию с использованием библиотеки Джексона и передать ее после вызова.

Другие вопросы по тегам