public class JsonObjectMapper extends ObjectMapper {
/**
*
*/
private static final long serialVersionUID = 8034942567620323925L;
public JsonObjectMapper() {
super();
this.setSerializerFactory(this.getSerializerFactory().withSerializerModifier(new MyBeanSerializerModifier()));
}
public class MyBeanSerializerModifier extends BeanSerializerModifier {
@Override
public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc, List<BeanPropertyWriter> beanProperties) {
//循环所有的beanPropertyWriter
for (BeanPropertyWriter beanProperty : beanProperties) {
//status字段转为负数
if(beanProperty.getName().equals("status")){
beanProperty.assignSerializer(new JsonSerializer<Object>() {
@Override
public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
int val = (int)value;
jg.writeNumber(0 - val);
}
});
}
BeanPropertyWriter writer = (BeanPropertyWriter) beanProperty;
Class<?> clazz = writer.getType().getRawClass();
//字符串
if (String.class.equals(clazz)) {
writer.assignNullSerializer(new JsonSerializer<Object>() {
@Override
public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
jg.writeString("");
}
});
}
//list
else if(List.class.isAssignableFrom(clazz)){
writer.assignNullSerializer(new JsonSerializer<Object>() {
@Override
public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
jg.writeObject(Collections.EMPTY_LIST);
}
});
}
//map
else if (Map.class.isAssignableFrom(clazz)) {
writer.assignNullSerializer(new JsonSerializer<Object>() {
@Override
public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
jg.writeObject(Collections.EMPTY_MAP);
}
});
}
//String[]
else if (String[].class.isAssignableFrom(clazz)) {
writer.assignNullSerializer(new JsonSerializer<Object>() {
@Override
public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
jg.writeObject(new String[0]);
}
});
}
//其它
else {
writer.assignNullSerializer(new JsonSerializer<Object>() {
@Override
public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
jg.writeString("");
}
});
}
}
return beanProperties;
}
}
}
Jackson自定义序列化器(针对null,针对指定name的属性)
于 2021-01-26 15:33:13 首次发布