当前位置: 首页 > article >正文

Spring Boot教程之四十五:使用 Jackson 在 Spring Boot 的 REST API 实现中使用 JSON

 使用 Jackson 在 Spring Boot 的 REST API 实现中使用 JSON

每当我们使用Spring(Spring Boot)实现REST API时,我们都会遇到在API 的JSON响应中排除 NULL 的需求。此外,可能还需要外部化打开/关闭此功能:在 JSON 响应中排除 NULL,从而允许 API 的使用者根据需要进行自定义。

在本文中,我们总结了使用 Jackson 实现上述功能的 ON/OFF 外部化的方法- Jackson 是一个基于 Java 的库,用于将 Java 对象序列化或映射到 JSON,反之亦然。

不成功的方法:

最初,我们尝试了 Spring Boot 现有的方法,但没有成功,例如:

  • 在application.properties中具有spring.jackson.default-property-inclusion属性。此属性采用以下值:always / non_null / non_absent / non_default / non_empty
  • 扩展WebMvcConfigurationSupport类并定制 Spring Boot 配置,见下文。
  • Java

@Configuration

class WebMvcConfiguration extends WebMvcConfiguration{

    @Override

    protected void extendsMessageConverters

      (List<HttpMessageConverter<?>> converters)

    {

        for(HttpMessageConverter<?> converter: converters)

        {

            if(converter instnceof MappingJackson2HttpMessageConverter)

            {

                ObjectMapper mapper = 

                  ((MappingJackson2HttpMessageConverter)converter)

                  .getObjectMapper();

                mapper.setSerializationInclusion(Include.NON_NULL);

                }

            }

        }

现在,创建org.springframework.http.converter.json.Jackson2ObjectMapperBuilderCustomizer的实例,下面给出的代码供您参考。

  • Java

@Bean

Public Jackson2ObjectMapperBuilderCustomizer customJackson(){

    return new Jackson2ObjectMapperBuilderCustomizer(){

    @Override

    public void customize(Jackson2ObjectMapperBuilder builder){

        builder.serializationInclusion(Include.NON_NULL);

        builder.failonUnknownProperties(false);

        }

    };

}

成功的方法:

如果尚未创建,则创建一个 JSON 响应对象。这是在序列化为 JSON 时您想要基于application.properties中的属性“排除/包含空字段”功能的对象。您可以在下方查看响应对象以供参考。

  • Java

public class RegistrationResponse{

  

    @JsonProperty("success")

    private Boolean success = null;

      

    @JsonProperty("message")

    private String message = null;

      

    @JsonProperty("data")

    private String data = null;

      

    @JsonProperty("error_code")

    private Integer errorCode = null;

      

    public RegistrationResponse success(Boolean success){

        this.success = success;

        return this;

        }

          

        @NotNull

        public Boolean isSuccess(){

            return success;

            }

        public void setSuccess(Boolean success){

            this.success = success;

        }

          

        public RegistrationResponse message(String message){

            this.message = message;

            return this;

            }

              

        @NotNull

        public String getMessage(){

            return message;

        }

          

        public void setMessage(String message){

            this.message = message;

        }

创建一个名为“ config.response.json.format.exclude_null ”的属性,其值可以是“ true ”或“ false ”。值“ true ”表示排除 JSON 响应中的空字段,值“ false ”表示不排除空字段。此外,将此属性绑定到类级属性,以便可以读取该值,下面给出的代码供您参考。

config.response.json.format.exclude_null = false

@Value(“${config.response.json.format.exclude_null}”)

私有布尔值toExcludeNull;

通过创建com.fasterxml.jackson.databind.ObjectMapper的实例来实现根据全局属性值排除空值的实际逻辑。

  • 如果全局属性值为 true ,则将创建的映射器的SerializationInclusion属性设置为Include.NON_NULL ,否则设置为Include.ALWAYS
  • 使用映射器将 Response 对象序列化为字符串并返回该字符串。确保处理 JsonProcessingException

让我们下面看看在构建 JSON 响应作为 API 实现的一部分时要添加的实际代码片段。

  • Java

RegistrationResponse regResp = new RegistrationResponse();

  

regResp.setSuccess(true);

regResp.setErrorCode(null);

 regResp.setData("testdata");

regResp.setMessage("success");

  

ObjectMapper mapper = new ObjectMapper()

mapper.enable(SerializationFeature.INDENT_OUTPUT);

  

if(toExcludeNull) mapper.setSerializationInclusion(Include.NON_NULL);

else mapper.serializationInclusion(Include.ALWAYS);

  

String regRespStr = null;

try{

  

    regRespStr = mapper.writeValueAsString(regResp);

    }

    catch(JsonProcessingException e)

        e.printStackTrace();

        }

    System.out.println("Formatted JSON Response:" + regRespStr);

这里,regRespStr是应用了 NULL 排除/包含的 JSON 字符串。  


http://www.kler.cn/a/463394.html

相关文章:

  • 基于Spring Boot的IT技术交流和分享平台的设计与实现源码
  • 日常工作常用命令集合
  • 创龙3588——debian根文件系统制作
  • enzymejest TDD与BDD开发实战
  • ImageNet 2.0?自动驾驶数据集迎来自动标注新时代
  • 二、AI知识(神经网络)
  • 【每日学点鸿蒙知识】弹窗封装成方法、Tab设置默认tabcontent、rawfile文件路径、默认组件宽高、不同状态颜色
  • TypeScript 后端开发中的热重载编译处理
  • Linux(Ubuntu)下ESP-IDF下载与安装完整流程(1)
  • 基于canvas实现的图片加水印功能
  • 单片机从入门到放弃教程001
  • 代码随想录算法训练营第二十天-二叉树-669. 修剪二叉搜索树
  • 如何使用 JPA 实现分页查询并返回 VO 对象
  • 东部新区文化旅游体育局莅临园区考察入驻企业
  • springboot534售楼管理系统(论文+源码)_kaic
  • 关于HarmonyOS Next中卡片的使用方法
  • ctr方法下载的镜像能用docker save进行保存吗?
  • 【老张的程序人生】一天时间,我成软考高级系统分析师
  • 6.若依数据字典
  • 日本IT|敏捷开发指的到底是什么?
  • 青少年编程与数学 02-005 移动Web编程基础 09课题、地理定位
  • 【分布式缓存中间件Memcached原理与应用】
  • leetcode 1315.祖父结点值为偶数的和
  • 【 Sonarqube】可视化Java项目单元测试覆盖率统计框架搭建
  • MySQL数据库的日志
  • typora+picgo core+minio自动上传图片