在我的应用程序中,我需要支持 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);
}
}
我在这里缺少什么?任何帮助表示赞赏!谢谢, 达格R
最佳答案
这对我来说效果很好......
@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>
关于java - 如何在 Spring Boot 中从端点响应中全局省略空 xml 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60785741/