Джерси JaxB unmarshalling типа объекта вопроса - PullRequest
0 голосов
/ 28 февраля 2020

Я использую клиент jersey2 jaxrs и moxy по умолчанию в качестве средства отображения ответов. Следующим json является мой ответ json от службы.

{"key":"thekey","id":"the___id","value":{"imageUrl":"https://asdad","imageType":"asdsadasd"}}

https://api.myjson.com/bins/efe74

Но в нашем бизнесе нужно значение «стоимость» поле не может быть определено. Иногда это может быть массив, объект или просто целое число. В общем, я не знаю тип объекта.

Из-за этого мой класс DTO выглядит следующим образом.

public class FieldData {
  private String id;
  private String key;
  private Object value;

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }


  public String getKey() {
    return key;
  }

  public void setKey(String value) {
    this.value = value;
  }

  public Object getValue() {
    return value;
  }

  public void setValue(Object value) {
    this.value = value;
  }
}

И по умолчанию jersey2 использует moxy и JAXB в качестве ответа Mapper. Теперь проблема в том, что id и значения ключей отображаются правильно, так как он знает конкретный тип.

Но поле значения переведено как XML строка в клиенте.

{
     "key":"thekey",
     "id":"the___id",
     "value": "<? xml version="1.0" encoding="UTF-8"?><value imageUrl=\"https://asdad\" imageType=\"asdsadasd\"><imageUrl></imageUrl></value>"
   }

Я могу понять, что из-за типа объекта JAXB может не знать конкретный тип. Но все, что я ожидаю, это то, что ответ этого поля значения должен быть в JSON вместо этой искаженной строки XML.

Как этого добиться?

1 Ответ

0 голосов
/ 24 апреля 2020

Похоже, что это невозможно с moxy как json mapper. Так что я пытался с Джексоном и работает отлично. При создании клиента используется следующее.

ClientBuilder.newClient()
       .property("jersey.config.client.disableMoxyJson", true)
       .register(new JacksonJsonProvider(mapper)) 
...