Json Filter and Serializer

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| package mydto; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @JsonIgnoreProperties("password") @JsonFilter("myFilter") public class MyDto { private int intValue; private String name; private String email; private String city; private String province; private String country; private String password; @JsonIgnore private String secondPassword; private String descr; private DtoInfo info; private Long length; private Long weight; public MyDto() { super(); } public int getIntValue() { return intValue; } ....... } |
| package mydto; import java.util.Date; public class DtoInfo { private String author; private Date createDt; private String access; private String desc; ..... } |
| package mydto; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; import com.fasterxml.jackson.databind.ser.PropertyWriter; import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter; public class DtoFilter extends SimpleBeanPropertyFilter { @Override public void serializeAsField(Object pojo, JsonGenerator jgen, SerializerProvider provider, PropertyWriter writer) throws Exception { if (include(writer)) { if (!writer.getName().equals("intValue")) { writer.serializeAsField(pojo, jgen, provider); return; } int intValue = ((MyDto) pojo).getIntValue(); if (intValue >= 0) { writer.serializeAsField(pojo, jgen, provider); } } else if (!jgen.canOmitFields()) { // since 2.3 writer.serializeAsOmittedField(pojo, jgen, provider); } } @Override protected boolean include(BeanPropertyWriter writer) { return true; } @Override protected boolean include(PropertyWriter writer) { return true; } } |
| package mydto; import java.io.IOException; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; public class DtoSerializer extends JsonSerializer<MyDto> { private JsonSerializer<MyDto> defaultSerializer; public DtoSerializer(JsonSerializer<MyDto> serializer) { defaultSerializer = serializer; } @Override public void serialize(MyDto dto, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { if("cn".equals(dto.getCountry())) { dto.setCountry("China"); } defaultSerializer.serialize(dto, jgen, provider); } @Override public boolean isEmpty(SerializerProvider provider, MyDto value) { return (value == null ); } } |
| package mydto; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.ser.std.StdSerializer; public class DtoInfoSerializer extends StdSerializer<DtoInfo> { private static final long serialVersionUID = 1L; public DtoInfoSerializer(Class<DtoInfo> dt) { super(dt); } @Override public void serialize(DtoInfo info, JsonGenerator jgen, SerializerProvider serializers) throws IOException, JsonProcessingException { if (info != null) { String pattern = "yyyy-MM-dd HH:mm:ss"; SimpleDateFormat sdf = new SimpleDateFormat(pattern); if (info.getCreateDt() == null) { info.setCreateDt(new Date()); } String formattedDate = sdf.format(info.getCreateDt()); jgen.writeStartObject(); jgen.writeStringField("authorName", info.getAuthor()); jgen.writeStringField("grantedAccess", info.getAccess()); jgen.writeStringField("createDate",formattedDate) ; jgen.writeEndObject(); } } } |
| package mydto; import java.util.Date; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.BeanDescription; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationConfig; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; import com.fasterxml.jackson.databind.ser.FilterProvider; import com.fasterxml.jackson.databind.ser.PropertyFilter; import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider; public class MyDtoMain { public static void main(String[] args) throws JsonProcessingException { test(); } public static void test() throws JsonProcessingException { PropertyFilter theFilter = new DtoFilter(); FilterProvider filters = new SimpleFilterProvider().addFilter("myFilter", theFilter); MyDto dto = new MyDto(); dto.setIntValue(-1); dto.setName("BlueSky"); dto.setEmail("bluesky@net.sky"); dto.setPassword("123456"); dto.setPassword("13579x"); dto.setCity("Dalian"); dto.setProvince("LiaoNing"); dto.setCountry("cn"); DtoInfo info=new DtoInfo(); info.setAccess("WRX"); info.setAuthor("admin"); info.setCreateDt(new Date()); dto.setInfo(info); ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(Include.NON_EMPTY); mapper.registerModule(new SimpleModule().addSerializer(DtoInfo.class, new DtoInfoSerializer(DtoInfo.class))); mapper.registerModule(new SimpleModule() { @Override public void setupModule(SetupContext context) { super.setupModule(context); context.addBeanSerializerModifier(new BeanSerializerModifier() { @Override public JsonSerializer<?> modifySerializer( SerializationConfig config, BeanDescription desc, JsonSerializer<?> serializer) { if (MyDto.class.isAssignableFrom(desc.getBeanClass())) { return new DtoSerializer((JsonSerializer<MyDto>) serializer); } return serializer; } }); } }); String dtoAsString = mapper.writer(filters).writeValueAsString(dto); System.out.println(dtoAsString); } } |

相关推荐
阿巴~阿巴~17 分钟前
自定义协议设计与实践:从协议必要性到JSON流式处理
服务器·网络·网络协议·json·操作系统·自定义协议
最笨的羊羊16 小时前
Flink CDC系列之:JSON 序列化器JsonRowDataSerializationSchemaUtils
json·flink cdc系列·serialization·json 序列化器·rowdata·schemautils
q***498620 小时前
SpringCloud系列教程:微服务的未来 (五)枚举处理器、JSON处理器、分页插件实现
spring cloud·微服务·json
愤怒的山羊2 天前
jetcache List 缓存, json 序列化 泛型解析成了 JsonObject 处理
缓存·json·list
2***d8852 天前
使用 MySQL 从 JSON 字符串提取数据
mysql·oracle·json
TDengine (老段)2 天前
TDengine 转换函数 TO_JSON 用户手册
android·大数据·数据库·json·时序数据库·tdengine·涛思数据
wow_DG3 天前
【Python✨】VS Code 秒开 Python 类型检查:一招 mypy + settings.json 让你的 Bug 原地现形!
python·json·bug
会篮球的程序猿4 天前
html+canvas+thikphp 可视化工具拖拽、编辑生成JSON,渲染成海报图片 完全自定义,支持选择,文字背景色
前端·html·json
倚肆4 天前
Hutool-json 库完整指南
java·json
q***23924 天前
MySQL JSON数据类型全解析(JSON datatype and functions)
android·mysql·json