package com.ruoyi.framework.config.ResponseVoConfig.WebConfig; /** * @Classname MyJsonMapper * @Description TODO * @Date 2022/1/20 0020 上午 10:39 * @Created by jcc */ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import java.io.IOException; import java.lang.reflect.Field; import java.text.SimpleDateFormat; import java.util.List; import java.util.Map; import java.util.Objects; import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES; /** * jackson 定制 * * @author lqq */ public class MyJsonMapper extends ObjectMapper { public MyJsonMapper() { super(); //收到未知属性时不报异常 this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false); //Long类型转为String类型 SimpleModule simpleModule = new SimpleModule(); //simpleModule.addSerializer(Long.class, ToStringSerializer.instance); //simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); this.registerModule(simpleModule); this.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); //设置日期格式 //处理空指针时设置的值 this.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() { @Override public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException { String fieldName = gen.getOutputContext().getCurrentName(); try { //反射获取字段类型 Field field = gen.getCurrentValue().getClass().getDeclaredField(fieldName); if (Objects.equals(field.getType(), String.class)) { //字符串型空值"" gen.writeString(""); return; } else if (Objects.equals(field.getType(), List.class)) { //列表型空值返回[] gen.writeStartArray(); gen.writeEndArray(); return; } else if (Objects.equals(field.getType(), Map.class)) { //map型空值返回{} gen.writeStartObject(); gen.writeEndObject(); return; } } catch (NoSuchFieldException e) { } //默认返回"" gen.writeString(""); } }); } }
package com.ruoyi.framework.config.ResponseVoConfig.WebConfig; /** * @Classname WebConfig * @Description TODO * @Date 2022/1/20 0020 上午 10:39 * @Created by jcc */ import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import java.util.List; /** * web 相关配置 * * @author lqq */ @Configuration public class WebConfig extends WebMvcConfigurationSupport { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { //在json转换之前先进行string转换 converters.add(new StringHttpMessageConverter()); //添加json转换 MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); jackson2HttpMessageConverter.setObjectMapper(new MyJsonMapper()); converters.add(jackson2HttpMessageConverter); //5、追加默认转换器 super.addDefaultHttpMessageConverters(converters); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?