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