2017-01-16 2 views
3

Скажем, у меня есть классы FooДжексон Mapper сериализации пустой объект вместо пустых

public class Foo { 
    private Bar bar; 
} 

и бар

public class Bar { 
    private String fizz; 
    private String bang; 
} 

EDIT: Для уточнения я не имею Foo и Bar и не может изменить эти классы.

Если я хочу сериализовать пустой объект типа Foo, его член, который имеет тип Bar, будет возвращен как null.

String json = objectMapper.writeValueAsString(new Foo()); // "{"bar" : null}" 

Есть ли способ я могу получить объект картограф сериализации пустого объекта Bar без необходимости создавать новый экземпляр Bar, а затем добавить его в новый экземпляр Foo?

String json = objectMapper.writeValueAsString(new Foo()) // "{bar": {"fizz" : null, "bang" : null } }" 
+0

Почему вы просто не инициализируете объект 'Bar', где объявляется' bar'? –

+0

Извините, что забыл прояснить это, я не владею Foo и Bar и не могу их изменить. – user3335313

ответ

0

Нет. Я не вижу никакого способа это сделать. Если вы не инициализируете свой Bar, это будет null внутри JSON.

Поскольку вы не можете изменять эти классы, вы можете просто проверить, если Bar внутри Foo является null и если это так, просто инициализировать его, и вы получите то, что вы хотите.

Bar bar = foo.getBar(); 
if (bar == null) { 
    foo.setBar(new Bar()); 
} 
String json = objectMapper.writeValueAsString(foo); 

The json будет следующее:

{ 
    "bar" : { 
     "fizz" : null, 
     "bang" : null 
    } 
} 

Надеется, что это помогает.

0

Вы можете создать собственный сериализатор для сериализации объектов Foo. Затем в вашей пользовательской реализации FooSerializer вы можете проверить значение нулевого бара и сериализовать его как экземпляр Bar по умолчанию. См. https://spin.atomicobject.com/2016/07/01/custom-serializer-jackson/ или http://www.baeldung.com/jackson-custom-serialization для некоторых примеров создания пользовательских сериализаторов.

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