API REST – Configurando o tipo de retorno padrão com Spring Boot


Quando usamos a anotação @RestController em nossa classe de controle de API, o Spring sempre retorna um JSON como resposta. Isso acontece automaticamente toda vez que um “cliente” faz uma solicitação sem enviar um cabeçalho “Accept” com o tipo de retorno desejado.

Um exemplo de método em uma classe controller é o seguinte:

@GetMapping("/test")
public ResponseEntity<TestDTO> test() {
    return ResponseEntity.ok(testService.test());
}

Nesse caso, o Spring converte o objeto da classe TestDTO em um JSON usando a biblioteca Jackson. No entanto, se um cabeçalho “Accept” for enviado com o valor “application/xml”, o retorno será um XML.

Para alterar o tipo de retorno padrão quando nenhum cabeçalho explícito é enviado na solicitação, podemos usar a propriedade “produces” nas anotações, como o @RequestMapping ou suas variações (@GetMapping, @PostMapping, etc.). Por exemplo:

@GetMapping(produces = MediaType.APPLICATION_XML_VALUE)
public ResponseEntity<TestDTO> test() {
    return ResponseEntity.ok(testService.test());
}

Isso precisará ser feito em todos os métodos de sua API.

API REST

Para mudar o retorno padrão de toda a aplicação você pode configurar o WebMvcConfigurer dessa forma:

@Bean
public WebMvcConfigurer customConfigurer() {
    return new WebMvcConfigurer() {
        @Override
        public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
            configurer.defaultContentType(MediaType.APPLICATION_JSON);
        }
    };
}

ou

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.defaultContentType(MediaType.APPLICATION_JSON);
    }
}
Related Posts Plugin for WordPress, Blogger...