如何在 Spring Boot 中从端点响应中全局省略空 xml 标记?

Posted

技术标签:

【中文标题】如何在 Spring Boot 中从端点响应中全局省略空 xml 标记?【英文标题】:How to globally omit empty xml tag from endpoint responses in Spring Boot? 【发布时间】:2020-07-02 06:34:47 【问题描述】:

在我的应用程序中,我需要同时支持 json 和 xml 响应格式,并希望从响应中省略空值。在 json 响应中这工作正常,但在 xml 响应中不行。结果:


  "anotherValue": "value"

和:

<MyDoc>
  <value/>
  <anotherValue>value</anotherValue>
</MyDoc>

我希望 xml 看起来像:

<MyDoc>
  <anotherValue>value</anotherValue>
</MyDoc>

@JsonInclude(JsonInclude.Include.NON_NULL) 注释每个响应类是一种可能的解决方案,但我希望它在全局范围内配置。我的代码:

@SpringBootApplication
@RestController
@Configuration
public class Application 

    @Bean
    public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) 
        return builder
                .serializationInclusion(JsonInclude.Include.NON_NULL)
                .serializationInclusion(JsonInclude.Include.NON_EMPTY)
                .build();
    

    @GetMapping(value = "api/json", produces = APPLICATION_JSON_VALUE)
    public MyDoc json() 
        return new MyDoc(null, "value");
    

    @GetMapping(value = "api/xml", produces = APPLICATION_XML_VALUE)
    public MyDoc xml() 
        return new MyDoc(null, "value");
    

    public static class MyDoc 
        public String value;
        public String anotherValue;

        public MyDoc(String val1, String val2) 
            this.value = val1;
            this.anotherValue = val2;
        
    

    public static void main(String[] args) 
        SpringApplication.run(Application.class, args);
    

我在这里缺少什么?任何帮助表示赞赏!谢谢, DagR

【问题讨论】:

【参考方案1】:

这对我来说很好......


    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() 
        return builder -> 
            builder.serializationInclusion(JsonInclude.Include.NON_NULL);
            builder.serializationInclusion(JsonInclude.Include.NON_EMPTY);
        ;
    

输出XML的注意事项需要使用jackson-dataformat-xml

        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </dependency>

【讨论】:

它确实有效,谢谢!虽然看不出有什么区别...

以上是关于如何在 Spring Boot 中从端点响应中全局省略空 xml 标记?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot响应式WebClient调用遗留端点

Spring Boot Webclient - 等待多呼叫的结束响应

尝试在 Java Spring Boot 中从 H2 数据库中获取相关实体

如何在 Spring Boot 中解决“提取类型 [class com.*] 的响应时出错”?

如何在 Spring(Boot)中装饰 REST 响应?

Spring boot actuator 将跟踪端点信息写入文件