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); } } |

相关推荐
CedarQR20 小时前
万字长文:从零在 RK3588 上部署 PaddleSpeech 中文 TTS 全流程(FastSpeech2 + HiFiGAN)
开发语言·c++·嵌入式硬件·ubuntu·json
Geoking.2 天前
JSON vs JSONL:从数据格式到 AI Agent 的工程实践
人工智能·深度学习·json
ID_180079054732 天前
京东商品详情API能力解析与标准化应用方案(含JSON返回示例)
json
灯澜忆梦3 天前
Go 语言 _JSON---序列化与反序列化
开发语言·golang·json
梦幻通灵4 天前
Notepad++格式化Json两种方案【持续更新】
android·json·notepad++
解局易否结局4 天前
鸿蒙原生开发实战|Native JSON 编解码与高性能数据序列化
华为·json·harmonyos
代码的小搬运工4 天前
网络请求(NSURL、NSURLRequest、NSURLSessionDataTask、协议回调与 JSON 数据的基本流向)
网络·数据库·json
2601_960906725 天前
网络防御等最先进AI模型领域
人工智能·json·hbase·flume·storm
前网易架构师-高司机6 天前
带标注的山体滑坡塌方数据集数据集,识别率78.1%,974张图,支持yolo,coco json,voc xml,文末有模型训练代码
xml·yolo·json·数据集·自然灾害·山体滑坡
前网易架构师-高司机7 天前
带标注的SDD-SAR遥感船舶识别数据集,识别率92.9%,7000张图,支持yolo,coco json,voc xml,文末有模型训练代码
yolo·json·数据集·遥感·sar·船舶·sdd