您的位置:首页 > 文旅 > 旅游 > 企业邮箱和个人邮箱区别_济南建设集团有限公司官网_好消息tvapp电视版_最近一周新闻大事摘抄

企业邮箱和个人邮箱区别_济南建设集团有限公司官网_好消息tvapp电视版_最近一周新闻大事摘抄

2025/1/7 8:05:40 来源:https://blog.csdn.net/xt14327/article/details/144833973  浏览:    关键词:企业邮箱和个人邮箱区别_济南建设集团有限公司官网_好消息tvapp电视版_最近一周新闻大事摘抄
企业邮箱和个人邮箱区别_济南建设集团有限公司官网_好消息tvapp电视版_最近一周新闻大事摘抄

 使用 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 字符串。  

版权声明:

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

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