java json 序列化对象空值不处理_java-Jackson Mapper序列化空对象而不是null

说我上课了

public class Foo {

private Bar bar;

}

和酒吧

public class Bar {

private String fizz;

private String bang;

}

编辑:为澄清起见,我不拥有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 } }"

解决方法:

我还需要为传统的客户端兼容性生成这样的结构,这是我的解决方案(取决于Spring Boot,因为使用@JsonComponent注释)

创建将被视为空的“特殊对象”

public class EmptyObject {

}

在模型中创建属性

@JsonProperty("data")

private EmptyObject data = new EmptyObject();

public EmptyObject getData() {

return data;

}

创建将处理上方空对象的序列化器

import com.fasterxml.jackson.core.JsonGenerator;

import com.fasterxml.jackson.databind.SerializerProvider;

import com.fasterxml.jackson.databind.ser.std.StdSerializer;

import com.sevensenders.datahub.api.service.response.model.EmptyObject;

import org.springframework.boot.jackson.JsonComponent;

import java.io.IOException;

@JsonComponent

public class EmptyObjectSerializer extends StdSerializer {

public EmptyObjectSerializer() {

this(null);

}

public EmptyObjectSerializer(Class t) {

super(t);

}

@Override

public void serialize(EmptyObject value, JsonGenerator gen, SerializerProvider provider) throws IOException {

// to maintain AF compatible format it is required to write {} instead of null

gen.writeStartObject();

gen.writeEndObject();

}

}

输出:

{

...

"data": {}

}

标签:serialization,jackson,json,java

来源: https://codeday.me/bug/20191111/2022659.html


版权声明:本文为weixin_29485887原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。