新闻详情

新闻详情

首页 / 资讯中心 / 详情

springboot web jackson

发布时间:2026/9/27 6:21:37来源:尧图网络
springboot web jackson
简述springboot web 自定义Jackson ObjectMapperBeanSerializerModifierimportcom.fasterxml.jackson.core.JsonGenerator;importcom.fasterxml.jackson.databind.BeanDescription;importcom.fasterxml.jackson.databind.JsonSerializer;importcom.fasterxml.jackson.databind.SerializationConfig;importcom.fasterxml.jackson.databind.SerializerProvider;importcom.fasterxml.jackson.databind.ser.BeanPropertyWriter;importcom.fasterxml.jackson.databind.ser.BeanSerializerModifier;importjava.io.IOException;importjava.time.LocalDateTime;importjava.util.Collection;importjava.util.Date;importjava.util.List;publicclassCustomNullSerializerModifierextendsBeanSerializerModifier{privatefinalStringNullSerializerstringNullSerializer;privatefinalArrayNullSerializerarrayNullSerializer;privatefinalDateNullSerializerdateNullSerializer;privatefinalNumberNullSerializernumberNullSerializer;publicCustomNullSerializerModifier(){this.stringNullSerializernewStringNullSerializer();this.arrayNullSerializernewArrayNullSerializer();this.dateNullSerializernewDateNullSerializer();this.numberNullSerializernewNumberNullSerializer();}OverridepublicListBeanPropertyWriterchangeProperties(SerializationConfigconfig,BeanDescriptionbeanDesc,ListBeanPropertyWriterbeanProperties){for(BeanPropertyWriterwriter:beanProperties){if(isString(writer)){writer.assignNullSerializer(this.stringNullSerializer);}elseif(isArrayType(writer)){writer.assignNullSerializer(this.arrayNullSerializer);}elseif(isNumberType(writer)){writer.assignNullSerializer(this.numberNullSerializer);}elseif(isDateType(writer)){writer.assignNullSerializer(this.dateNullSerializer);}elseif(isLocalDateTime(writer)){writer.assignNullSerializer(this.dateNullSerializer);}}returnbeanProperties;}booleanisString(BeanPropertyWriterwriter){returnwriter.getType().getRawClass().isAssignableFrom(String.class);}booleanisArrayType(BeanPropertyWriterwriter){returnwriter.getType().getRawClass().isArray()||writer.getType().getRawClass().isAssignableFrom(List.class)||writer.getType().getRawClass().isAssignableFrom(Collection.class);}booleanisNumberType(BeanPropertyWriterwriter){returnwriter.getType().getRawClass().isAssignableFrom(Integer.class)||writer.getType().getRawClass().isAssignableFrom(Long.class)||writer.getType().getRawClass().isAssignableFrom(Double.class);}booleanisDateType(BeanPropertyWriterwriter){returnwriter.getType().getRawClass().isAssignableFrom(Date.class);}booleanisLocalDateTime(BeanPropertyWriterwriter){returnwriter.getType().getRawClass().isAssignableFrom(LocalDateTime.class);}}classStringNullSerializerextendsJsonSerializerObject{Overridepublicvoidserialize(Objecto,JsonGeneratorjsonGenerator,SerializerProviderserializerProvider)throwsIOException{jsonGenerator.writeString();}}classArrayNullSerializerextendsJsonSerializerObject{Overridepublicvoidserialize(Objecto,JsonGeneratorjsonGenerator,SerializerProviderserializerProvider)throwsIOException{jsonGenerator.writeStartArray();jsonGenerator.writeEndArray();}}classDateNullSerializerextendsJsonSerializerObject{Overridepublicvoidserialize(Objecto,JsonGeneratorjsonGenerator,SerializerProviderserializerProvider)throwsIOException{jsonGenerator.writeNull();}}classNumberNullSerializerextendsJsonSerializerObject{Overridepublicvoidserialize(Objecto,JsonGeneratorjsonGenerator,SerializerProviderserializerProvider)throwsIOException{if(oinstanceofDouble){jsonGenerator.writeNumber(0.00);}elseif(oinstanceofFloat){jsonGenerator.writeNumber(0.00f);}else{jsonGenerator.writeNumber(0);}}}Object Mapperimportcom.fasterxml.jackson.annotation.JsonInclude;importcom.fasterxml.jackson.core.json.JsonReadFeature;importcom.fasterxml.jackson.databind.DeserializationFeature;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.fasterxml.jackson.databind.SerializationFeature;importcom.fasterxml.jackson.datatype.jsr310.JavaTimeModule;importcom.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;importcom.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;importcom.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;importcom.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;importcom.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;importcom.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;importcom.ft.mall.common.json.serializer.CustomNullSerializerModifier;importjava.text.SimpleDateFormat;importjava.time.LocalDate;importjava.time.LocalDateTime;importjava.time.LocalTime;importjava.time.ZoneId;importjava.time.format.DateTimeFormatter;importjava.util.TimeZone;publicclassCustomObjectMapperextendsObjectMapper{privatestaticfinalStringDATE_TIMEyyyy-MM-dd HH:mm:ss;privatestaticfinalStringDATEyyyy-MM-dd;privatestaticfinalStringTIMEHH:mm:ss;publicCustomObjectMapper(){super();registerModule();setSerializer();configure();this.setSerializerFactory(this.getSerializerFactory().withSerializerModifier(newCustomNullSerializerModifier()));}/* * LocalDateTime transfer */privatevoidregisterModule(){JavaTimeModulejavaTimeModulenewJavaTimeModule();javaTimeModule.addSerializer(LocalDateTime.class,newLocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATE_TIME)));javaTimeModule.addDeserializer(LocalDateTime.class,newLocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DATE_TIME)));javaTimeModule.addSerializer(LocalDate.class,newLocalDateSerializer(DateTimeFormatter.ofPattern(DATE)));javaTimeModule.addDeserializer(LocalDate.class,newLocalDateDeserializer(DateTimeFormatter.ofPattern(DATE)));javaTimeModule.addSerializer(LocalTime.class,newLocalTimeSerializer(DateTimeFormatter.ofPattern(TIME)));javaTimeModule.addDeserializer(LocalTime.class,newLocalTimeDeserializer(DateTimeFormatter.ofPattern(TIME)));registerModule(javaTimeModule);}privatevoidsetSerializer(){// 1. 序列化配置 // 序列化时忽略 null 值字段不输出 null 字段setSerializationInclusion(JsonInclude.Include.NON_NULL);// 序列化空对象不抛错比如空 Bean 转 JSONconfigure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false);// 日期格式统一Date 类型setDateFormat(newSimpleDateFormat(yyyy-MM-dd HH:mm:ss));setTimeZone(TimeZone.getTimeZone(ZoneId.systemDefault()));}privatevoidconfigure(){// 2. 反序列化配置 // JSON 存在 Java 对象没有的字段时不抛错最常用configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);// 允许 JSON 字符串带多余的转义比如 \ 这种configure(JsonReadFeature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER.mappedFeature(),true);// 允许 JSON 数字用引号包裹如 age:18 → 自动转 intconfigure(JsonReadFeature.ALLOW_SINGLE_QUOTES.mappedFeature(),true);// 时间不序列化成时间戳而是字符串configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);// 未知属性不报错configure(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);}}web 注册ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{BeanpublicMappingJackson2HttpMessageConverterconfigureMessageConverters(){MappingJackson2HttpMessageConverterjackson2HttpMessageConverternewMappingJackson2HttpMessageConverter();ObjectMapperobjectMappernewCustomObjectMapper();jackson2HttpMessageConverter.setObjectMapper(objectMapper);ListMediaTypelistnewArrayList();MediaTypemediaTypenewMediaType(application,json,StandardCharsets.UTF_8);list.add(mediaType);jackson2HttpMessageConverter.setSupportedMediaTypes(list);returnjackson2HttpMessageConverter;}}
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Laravel-Lang/lang 仓库贡献指南:环境搭建、测试与本地化翻译工作流 2026/9/27 7:13:30

Laravel-Lang/lang 仓库贡献指南:环境搭建、测试与本地化翻译工作流

后端 【免费下载链接】lang List of 128 languages for Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova and Laravel UI. 项目地址: https://gitcode.com/gh_mirrors/la/lang 点击查看 免费下载 本篇技术…

阅读更多 →
做网站怎么穿插元素避坑指南:5个方案实测 2026/9/27 7:13:30

做网站怎么穿插元素避坑指南:5个方案实测

做网站怎么穿插元素避坑指南:5个方案实测 很多老板找我们做站,第一句话往往是:“域名买好了,服务器选了个最便宜的,结果网站打开像蜗牛,还老掉线。”这就是典型的 域名服务器搞不懂…

阅读更多 →
黄冈网站推广软件下载速查手册:3步修复被黑挂马漏洞 2026/9/27 7:13:24

黄冈网站推广软件下载速查手册:3步修复被黑挂马漏洞

黄冈网站推广软件下载速查手册:3步修复被黑挂马漏洞 网站突然打不开,或者打开全是乱七八糟的弹窗广告?后台密码改了也没用,页面代码里全是乱码?这就是典型的网站被黑挂马。别慌,这种时候盲目重装系统往往治标不治本,甚至可能丢失关键数据。很多黄冈本…

阅读更多 →
把数据中心搬上天:谷歌“太阳捕手计划“即将发射首颗TPU卫星,太空算力竞赛正式打响 2026/9/27 7:13:24

把数据中心搬上天:谷歌“太阳捕手计划“即将发射首颗TPU卫星,太空算力竞赛正式打响

一台普通冰箱大小的卫星,将在不久后把四颗谷歌自研的TPU芯片送入近地轨道。这不是科幻电影的桥段,而是谷歌刚刚敲定的真实行程——代号"MVP"的原型卫星已确定搭乘SpaceX猎鹰9号火箭的Transporter-18拼车任务,从范登堡太空军基地升空…

阅读更多 →
5个wordpress+的客户避坑指南:域名服务器哪家选好 2026/9/27 7:13:05

5个wordpress+的客户避坑指南:域名服务器哪家选好

5个wordpress+的客户避坑指南:域名服务器哪家选好 找建站公司最怕什么?不是功能少,而是域名和服务器被坑高价。很多wordpress+的客户在询价时,对方报个“高端服务器”一年好几千,结果配置低得离谱,备案还卡在中间。到底域名服务器…

阅读更多 →
AI 做手机壁纸:万能公式 + 25 个模板 2026/9/27 7:12:39

AI 做手机壁纸:万能公式 + 25 个模板

找壁纸翻半天不是带水印就是分辨率低,用 AI 生成又怕出来的图灰扑扑不能看? 这篇文章分两部分:先教你一个壁纸提示词万能公式,学会了自己能组合出几百张;再给你 25 个国内最热门风格的现成模板,二次元、国…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉