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