# 当我们在springboot项目中对返回的数据没有进行任何处理时默认返回值为null值如下
# 此时我们可以用默认的jackson格式化处理,只需要加上一个json格式化的配置类继承MappingJackson2HttpMessageConverter类,按我们的需要实现,即可按我们的需要处理json序列化返回值格式,返回结果如下:
# 具体代码如下,直接复制即可使用,希望对大家有所帮助!!
@Configuration
public class JacksonHttpMessageConverter extends MappingJackson2HttpMessageConverter {
/**
* json处理器
*/
public static class MyBeanSerializerModifier extends BeanSerializerModifier {
private static final Map<String, JsonSerializer<Object>> FACTORY = new HashMap<>();
private static final String ARRAY = "array";
private static final String STRING = "string";
private static final String NUMBER = "number";
private static final String OBJECT = "object";
private static final String BOOLE = "boole";
static {
FACTORY.put(ARRAY, new NullArrayJsonSerializer());
FACTORY.put(STRING, new NullStringJsonSerializer());
FACTORY.put(NUMBER, new NullNumberJsonSerializer());
FACTORY.put(OBJECT, new NullObjectJsonSerializer());
FACTORY.put(BOOLE, new NullBooleanJsonSerializer());
}
@Override
public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc, List<BeanPropertyWriter> beanProperties) {
// 需要进行添加序列化的类型我们可以在这里进行添加和判断
for (BeanPropertyWriter writer : beanProperties) {
// 判断字段的类型,如果是数组或集合则注册nullSerializer
writer.assignNullSerializer(FACTORY.get(TypeEnum.isWrite(writer)));
}
return beanProperties;
}
}
public enum TypeEnum {
ARRAY("array",
writer -> {
Class<?> clazz = writer.getType().getRawClass();
return clazz.isArray() || Collection.class.isAssignableFrom(clazz);
}
),
STRING("string",
writer -> {
Class<?> clazz = writer.getType().getRawClass();
return CharSequence.class.isAssignableFrom(clazz) || Character.class.isAssignableFrom(clazz);
}
),
NUMBER("number",
writer -> {
Class<?> clazz = writer.getType().getRawClass();
return Number.class.isAssignableFrom(clazz);
}
),
BOOLE("boole",
writer -> {
Class<?> clazz = writer.getType().getRawClass();
return clazz.equals(Boolean.class);
}
),
;
public static String isWrite(BeanPropertyWriter writer) {
for (TypeEnum value : TypeEnum.values()) {
if (value.result.apply(writer)) {
return value.type;
}
}
return "object";
}
private final Function<BeanPropertyWriter, Boolean> result;
private final String type;
TypeEnum(String type, Function<BeanPropertyWriter, Boolean> result) {
this.result = result;
this.type = type;
}
}
/**
* 处理数组集合类型的null值
*/
private static class NullArrayJsonSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeStartArray();
jsonGenerator.writeEndArray();
}
}
/**
* 处理字符串类型的null值
*/
private static class NullStringJsonSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString("");
}
}
/**
* 处理数值类型的null值
*/
private static class NullNumberJsonSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeNumber(0);
}
}
/**
* 处理boolean类型的null值
*/
private static class NullBooleanJsonSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeBoolean(false);
}
}
/**
* 处理实体对象类型的null值
*/
private static class NullObjectJsonSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeStartObject();
jsonGenerator.writeEndObject();
}
}
/**
* 初始化处理序列化null值,及日期格式化格式
*/
public JacksonHttpMessageConverter() {
getObjectMapper()
.setSerializerFactory(getObjectMapper()
.getSerializerFactory()
.withSerializerModifier(new MyBeanSerializerModifier()))
.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
}
}