3 changed files with 156 additions and 7 deletions
@ -0,0 +1,72 @@ |
|||||
|
package com.yxt.common.base.config; |
||||
|
|
||||
|
import com.fasterxml.jackson.core.JsonGenerator; |
||||
|
import com.fasterxml.jackson.databind.JsonSerializer; |
||||
|
import com.fasterxml.jackson.databind.SerializerProvider; |
||||
|
|
||||
|
import java.io.IOException; |
||||
|
|
||||
|
/** |
||||
|
* @Author dimengzhe |
||||
|
* @Date 2022/4/29 18:59 |
||||
|
* @Description |
||||
|
*/ |
||||
|
public class CustomizeNullJsonSerializer { |
||||
|
|
||||
|
/** |
||||
|
* 处理数组集合类型的null值 |
||||
|
*/ |
||||
|
public static class NullArrayJsonSerializer extends JsonSerializer<Object> { |
||||
|
@Override |
||||
|
public void serialize(Object value, JsonGenerator jsonGenerator, |
||||
|
SerializerProvider serializerProvider) throws IOException { |
||||
|
jsonGenerator.writeStartArray(); |
||||
|
jsonGenerator.writeEndArray(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 处理字符串类型的null值 |
||||
|
*/ |
||||
|
public static class NullStringJsonSerializer extends JsonSerializer<Object> { |
||||
|
@Override |
||||
|
public void serialize(Object value, JsonGenerator jsonGenerator, |
||||
|
SerializerProvider serializerProvider) throws IOException { |
||||
|
jsonGenerator.writeString(""); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 处理数值类型的null值 |
||||
|
*/ |
||||
|
public static class NullNumberJsonSerializer extends JsonSerializer<Object> { |
||||
|
@Override |
||||
|
public void serialize(Object value, JsonGenerator jsonGenerator, |
||||
|
SerializerProvider serializerProvider) throws IOException { |
||||
|
jsonGenerator.writeNumber(0); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 处理boolean类型的null值 |
||||
|
*/ |
||||
|
public static class NullBooleanJsonSerializer extends JsonSerializer<Object> { |
||||
|
@Override |
||||
|
public void serialize(Object value, JsonGenerator jsonGenerator, |
||||
|
SerializerProvider serializerProvider) throws IOException { |
||||
|
jsonGenerator.writeBoolean(false); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 处理实体对象类型的null值 |
||||
|
*/ |
||||
|
/* public static class NullObjectJsonSerializer extends JsonSerializer<Object> { |
||||
|
@Override |
||||
|
public void serialize(Object value, JsonGenerator jsonGenerator, |
||||
|
SerializerProvider serializerProvider) throws IOException { |
||||
|
jsonGenerator.writeStartObject(); |
||||
|
jsonGenerator.writeEndObject(); |
||||
|
} |
||||
|
}*/ |
||||
|
} |
@ -0,0 +1,68 @@ |
|||||
|
package com.yxt.common.base.config; |
||||
|
|
||||
|
import com.fasterxml.jackson.databind.BeanDescription; |
||||
|
import com.fasterxml.jackson.databind.SerializationConfig; |
||||
|
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; |
||||
|
import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; |
||||
|
|
||||
|
import java.util.Collection; |
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* @Author dimengzhe |
||||
|
* @Date 2022/4/29 18:58 |
||||
|
* @Description |
||||
|
*/ |
||||
|
public class MyBeanSerializerModifier extends BeanSerializerModifier { |
||||
|
|
||||
|
@Override |
||||
|
public List<BeanPropertyWriter> changeProperties(SerializationConfig config, |
||||
|
BeanDescription beanDesc, |
||||
|
List<BeanPropertyWriter> beanProperties) { |
||||
|
// 循环所有的beanPropertyWriter
|
||||
|
for (int i = 0; i < beanProperties.size(); i++) { |
||||
|
BeanPropertyWriter writer = beanProperties.get(i); |
||||
|
// 判断字段的类型,如果是数组或集合则注册nullSerializer
|
||||
|
/* if (isArrayType(writer)) { |
||||
|
// 给writer注册一个自己的nullSerializer
|
||||
|
writer.assignNullSerializer(new CustomizeNullJsonSerializer.NullArrayJsonSerializer()); |
||||
|
}*/ |
||||
|
if (isStringType(writer)) { |
||||
|
writer.assignNullSerializer(new CustomizeNullJsonSerializer.NullStringJsonSerializer()); |
||||
|
} |
||||
|
} |
||||
|
return beanProperties; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 是否是数组 |
||||
|
*/ |
||||
|
private boolean isArrayType(BeanPropertyWriter writer) { |
||||
|
Class<?> clazz = writer.getType().getRawClass(); |
||||
|
return clazz.isArray() || Collection.class.isAssignableFrom(clazz); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 是否是String |
||||
|
*/ |
||||
|
private boolean isStringType(BeanPropertyWriter writer) { |
||||
|
Class<?> clazz = writer.getType().getRawClass(); |
||||
|
return CharSequence.class.isAssignableFrom(clazz) || Character.class.isAssignableFrom(clazz); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 是否是数值类型 |
||||
|
*/ |
||||
|
private boolean isNumberType(BeanPropertyWriter writer) { |
||||
|
Class<?> clazz = writer.getType().getRawClass(); |
||||
|
return Number.class.isAssignableFrom(clazz); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 是否是boolean |
||||
|
*/ |
||||
|
private boolean isBooleanType(BeanPropertyWriter writer) { |
||||
|
Class<?> clazz = writer.getType().getRawClass(); |
||||
|
return clazz.equals(Boolean.class); |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue