您的位置:首页 > 文旅 > 美景 > 东莞网站制作搜索祥奔科技_环球军事头条_教育培训网站大全_网络推广入门教程

东莞网站制作搜索祥奔科技_环球军事头条_教育培训网站大全_网络推广入门教程

2025/7/17 18:12:44 来源:https://blog.csdn.net/weixin_55772633/article/details/148891094  浏览:    关键词:东莞网站制作搜索祥奔科技_环球军事头条_教育培训网站大全_网络推广入门教程
东莞网站制作搜索祥奔科技_环球军事头条_教育培训网站大全_网络推广入门教程

一、前置说明

现在已经在本地准备了一个接口,接口路径为/basicInformation/basicInfo。接口的返回值如下:

可以看到,很多多余没有数据的字段返回null值。现在已此为案例演示如何实现JSON 序列化优化,用于忽略null值。

二、针对特定接口null的处理

2.1使用 @JsonInclude(JsonInclude.Include.NON_NULL) 注解

2.1.1 类级别:在接口返回的实体类上添加
@JsonInclude(JsonInclude.Include.NON_NULL) 注解,强制忽略 null 值:

类级别:所有字段为 null 时不返回


测试结果:

2.1.2  字段级别:在具体字段上添加@JsonInclude(JsonInclude.Include.NON_NULL) ,仅该字段为 null 时不返回

字段级别:仅该字段为 null 时不返回

测试结果:

2.2使用@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)

用法同@JsonInclude

 区别如下:

  • 注解位置

    • @JsonInclude 是 Jackson 2.x 中引入的注解,通常用于类或字段级别。

    • @JsonSerialize 是 Jackson 1.x 中引入的注解,主要用于指定自定义序列化器,但也支持通过 include 属性控制字段的包含策略。

  • 使用场景

    • @JsonInclude

      • 更现代,推荐在 Jackson 2.x 及以上版本中使用。

      • 语法更简洁,易于理解和使用。

    • @JsonSerialize

      • 更灵活,可以指定自定义序列化器。

      • 通过 include 属性控制字段的包含策略,但语法相对复杂。

三、针对所有接口null 的处理

3.1 全局配置(影响所有接口)

若需所有接口忽略null值,可在application.properties中配置:

spring:jackson:default-property-inclusion: non_null #序列化时,不输出null属性

测试结果:

3.2  mvc的全局处理(推荐)

/*** mvc的全局处理*/
@Configuration
public class WebMvcGlobalConfig extends WebMvcConfigurationSupport {/*** 创建了一个 RequestContextFilter 实例,它是一个用于管理请求上下文信息的过滤器,能够为后续的请求处理提供一些上下文支持,比如获取请求的 URI、参数等信息* 注意:此处如果不配置,那么获取ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();对象将为null*/@Beanpublic FilterRegistrationBean<RequestContextFilter> requestContextFilter() {RequestContextFilter filter = new RequestContextFilter();FilterRegistrationBean<RequestContextFilter> registration = new FilterRegistrationBean<>(filter);registration.setOrder(Ordered.HIGHEST_PRECEDENCE); // 设置最高优先级return registration;}/*** 用于配置 Spring MVC 的消息转换器列表*/@Overrideprotected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {converters.add(mappingJackson2HttpMessageConverter());}private MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {ObjectMapper objectMapper = new ObjectMapper();//序列化空对象时不会抛出异常objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, Boolean.FALSE);//设置序列化包含策略为 NON_NULLobjectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);return new MappingJackson2HttpMessageConverter(objectMapper);}}

以下是对这段代码的详细解释:

类定义

  • 使用 @Configuration 注解将这个类定义为一个 Spring 配置类,表示其中包含的是 Spring 容器的配置代码,Spring 容器会根据其中的配置来创建和管理 Bean。

  • 继承 WebMvcConfigurationSupport 类,这个类是 Spring MVC 的基础配置支持类,提供了很多默认的配置和方法,可以通过重写其中的方法来自定义 Spring MVC 的行为。

方法 requestContextFilter

  • 通过 @Bean 注解声明该方法返回的对象是一个 Spring 管理的 Bean,即 RequestContextFilter 类型的过滤器。

  • 创建了一个 RequestContextFilter 实例,它是一个用于管理请求上下文信息的过滤器,能够为后续的请求处理提供一些上下文支持,比如获取请求的 URI、参数等信息。

  • 创建了一个 FilterRegistrationBean 对象,并将上述过滤器实例设置给它,FilterRegistrationBean 用于在 Spring 容器中注册过滤器。

  • 调用 registration.setOrder(Ordered.HIGHEST_PRECEDENCE) 方法将该过滤器的优先级设置为最高。这意味着在多个过滤器的场景下,这个过滤器会在其他过滤器之前先处理请求。

方法 configureMessageConverters

  • 重写了父类 WebMvcConfigurationSupport 中的 configureMessageConverters 方法,这个方法用于配置 Spring MVC 的消息转换器列表。

  • 调用 super.configureMessageConverters(converters),执行父类的实现,确保默认的消息转换器被添加到转换器列表中,这样可以保证 Spring MVC 的默认消息转换功能正常工作。

  • 调用 converters.add(mappingJackson2HttpMessageConverter()) 方法,将自定义的 MappingJackson2HttpMessageConverter 添加到转换器列表中,以便在处理请求和响应时使用这个自定义的转换器来转换 JSON 数据格式。

方法 mappingJackson2HttpMessageConverter

  • 创建了一个 ObjectMapper 实例,它是 Jackson 库中用于处理 JSON 数据的核心对象,负责将 Java 对象转换为 JSON 数据,以及将 JSON 数据转换为 Java 对象。

  • 调用 objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false) 方法,将 FAIL_ON_EMPTY_BEANS 特性设置为 false,表示在序列化空对象时不会抛出异常。默认情况下,如果一个 Java 对象没有任何属性(即空对象),Jackson 在序列化时会抛出异常,这里将其关闭,允许序列化空对象。

  • 调用 objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL) 方法,设置序列化包含策略为 NON_NULL,即在序列化 Java 对象为 JSON 数据时,只包含非空的字段。这样可以避免在 JSON 响应中出现多余的空字段,使响应数据更加简洁。

  • 创建一个 MappingJackson2HttpMessageConverter 实例,并将上述配置好的 ObjectMapper 设置给它,这样该转换器在处理 JSON 数据的序列化和反序列化时就会使用这些配置。

这个配置类的作用是自定义 Spring MVC 的部分行为,包括添加一个最高优先级的 RequestContextFilter 过滤器来管理请求上下文,以及自定义 JSON 数据的消息转换器,以满足特定的序列化需求。

测试结果:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com