2016-10-21 13 views
1

У меня возникла проблема, когда аннотации JsonProperty для изменения имени переменной не выполняются. Вот пример приложение https://github.com/derrylvarghese/problematicjson@JsonProperty не работает (Weblogic 12.2.1 и Java 8)

Я преобразование следующего JSON в POJO и затем преобразовать его обратно в формат JSON

String json = "{\"response\": {\"companyname\": \"ABC Company\",\"issn\": [{\"format\": \"paper\",\"val\": \"0018-9480\"},{\"format\": \"online\",\"val\": \"1557-9670\"}]},\"teststring\":\"testing me out\"}"; 

    ObjectMapper mapper = new ObjectMapper(); 
    WrapperObj record = mapper.readValue(json, WrapperObj.class); 
    ObjectWriter writer = mapper.writer(); 
    writer.writeValue(response.getOutputStream(), record); 

Я ожидал «Вэл» в объекте «тек-», чтобы показать, как 'value', поскольку у меня есть @JsonProperty («значение»), примененное к полю «val». Вот выход json (отредактированный для краткости).

issn: [ 
      { 
      format: "Print ISSN", 
      val: "0018-9480" 
      } 
      ] 

Если бы я создать объект тек- и сделать record.getResponse.setIssn (setMyObject), выход JSON показан правильный JsonProperty тег. Я связываюсь с примером проекта, который покажет это, если кому-то это интересно. (Мерзавец ссылка: https://github.com/derrylvarghese/problematicjson)

Update Похоже, так как я аннотированный мой POJO поле с @JsonProperty("value"), входящее поле JSON также следует назвать «значение». Все это, пока я видел 'val' в выходе, потому что у меня было все поле List, в которое шли все поля. Я удалил это поле JsonAnyGetter, и теперь мое поле «val» не отображается.

+0

Я ударил по блочному тесту, и результат был таким, как ожидалось, 'val' был записан как' value'. У вас есть образец кода вашей сериализации? В качестве примечания стороны вам не нужно комментировать геттер и поле. – Leon

+0

Как @Leon, я не могу воспроизвести. – rbntd

+0

Возможно, вы импортировали неправильный класс аннотации JsonProperty или вы можете использовать неправильный сериализатор JSON, то есть тот, который не заботится о аннотации 'JsonProperty'. Предоставьте больше кода, в частности, импорт класса 'Isbn' и конфигурацию сериализатора JSON. – Codo

ответ

0

ИТАК, видимо, когда-то в прошлом Джексон, возможно, поддерживается одно имя для сериализации, а другой для десериализации. Уже не кажется. Когда я аннотирую getter (getVal()) с @JsonProperty («значение»), он ожидает, что входящая полезная нагрузка json также будет иметь значение «(а не« val »), хотя у меня есть метод setVal().

0

@Codo сказать проверить свой импорт, у меня была такая же проблема, когда в моем проекте несколько импортных смешанных библиотек от разных поставщиков Jaxson reader/writer Проверьте это, и я уверен, что вы найдете свою ошибку.

0

Убедитесь, что вы добавили ДЖЕКСОНА-DataBind зависимость/баночку в проекте -

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.8.0</version> 
</dependency> 
+0

Да. У меня есть это. – user1187958

 Смежные вопросы

  • Нет связанных вопросов^_^