Как глобально опустить пустой тег xml в ответах конечной точки в Spring Boot? - PullRequest
0 голосов
/ 21 марта 2020

В моем приложении мне нужно поддерживать оба формата ответа: 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 Ответ

1 голос
/ 21 марта 2020

это прекрасно работает для меня ...


    @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>
...