问题
1. 在SpringMVC默认的Jackson消息转化器会把结果为null的变量也进行序列化操作,前端拿到数据后会很头疼。
2. 当序列号一个空对象时(把查询结果返回前端时)会报错;例如在分页查询中,result默认为空集合,当查询结果为空时就会报错。
解决
package com.ssm.subject.application.config;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.util.List;
/**
* MVC的全局处理(空值)
*/
@Configuration
public class GlobalConfig extends WebMvcConfigurationSupport {
/**
* configureMessageConverters:配置在 MVC 中用于处理 HTTP 消息转换的转换器列表。
* @param converters
*/
@Override
protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters); //保留父类对消息转换器列表可能已经做过的配置
converters.add(mappingJackson2HttpMessageConverter()); //添加自定义的转换器
}
/**
* 自定义mappingJackson2HttpMessageConverter
* 目前实现:空值忽略,空字段可返回
*/
private MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
//ObjectMapper是 Jackson 库中用于处理 JSON 序列化和反序列化的核心类。
ObjectMapper objectMapper = new ObjectMapper();
// Jackson 库中的一个序列化特性: 默认情况下,序列化一个空对象时,会抛出异常。通过将这个特性设置为false,就改变了这种行为。
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
//设置序列化包含规则:在序列化时只包含非空的属性值(忽略空值)
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return new MappingJackson2HttpMessageConverter(objectMapper);
}
}