Java Spring - игнорировать нулевые значения в классе вложенных объектов на GET - PullRequest
0 голосов
/ 11 февраля 2019

Итак, у меня немного странное поведение.В моем приложении Spring у меня есть два класса объектов, один из которых вложен в другой.Я использую Джексона для сериализации моих классов объектов в JSON.В моем втором объектном классе (ObjectB) у меня есть 4 поля.Основываясь на некоторых условиях пользовательского интерфейса, я либо устанавливаю поля 1 и 2, либо 3 и 4, но не все сразу.Я включил аннотацию Джексона, чтобы игнорировать пустые поля, и это работает.В моей БД после отправки я вижу только поля 1 и 2 ИЛИ 3 и 4.

Проблема возникает, когда я получаю свои данные из БД.Чтобы отобразить JSON в мой класс Object, я должен установить поля в моем классе ObjectB при разборе ObjectA.Это заставляет меня видеть, что возвращаются все 4 поля, причем половина их значений отображается как ноль.Я распечатываю эту информацию в своем пользовательском интерфейсе, поэтому хочу сделать ее более читабельной, не возвращая нулевые значения.Есть какой-либо способ сделать это?Я опубликую пример кода того, что я пытаюсь сделать.

ObjectA.class

@JsonAutoDetect(fieldVisibility = Visibility.ANY, isGetterVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ObjectA {

   String field_A1;
   String field_A2;
   ObjectB field_A3;

   //Getters and Setters
}

ObjectB.class

@JsonAutoDetect(fieldVisibility = Visibility.ANY, isGetterVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ObjectB {

   String field_B1;
   String field_B2;
   String field_B3;
   String field_B4;

   //Getters and Setters
}

Данные в БД - Object1:{field_A1:"abc",field_A2:"def",field_A3:{field_B1:"ghi",field_B2:"jkl"}}

Логика отображения для объекта класса A

ObjectA objA = new ObjectA();
...
ObjectB objB = new ObjectB();
if(jsonObj.get("field_B1") != null) {
    objB.setField_B1(jsonObj.get("field_B1"));
}

if(jsonObj.get("field_B2") != null) {
    objB.setField_B2(jsonObj.get("field_B2"));
}

if(jsonObj.get("field_B3") != null) {
    objB.setField_B3(jsonObj.get("field_B3"));
}

if(jsonObj.get("field_B4") != null) {
    objB.setField_B4(jsonObj.get("field_B4"));
}

objA.setField_3(objB);

Данные, возвращаемые в пользовательский интерфейс - Object1:{field_A1:"abc",field_A2:"def",field_A3:{field_B1:"ghi",field_B2:"jkl",field_B3:null,field_B4:null}}

1 Ответ

0 голосов
/ 11 февраля 2019

Я до сих пор не уверен, какую версию Spring вы используете, но из 4+, если я правильно помню, вы можете определить пользовательский Джексон ObjectMapper Bean.

@Bean
@Primary
public ObjectMapper customObjectMapper() {
   final ObjectMapper mapper = new ObjectMapper();
   ...
   mapper.setSerializationInclusion(Include.NON_NULL);
   return mapper;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...