在springboot应用程序中如何设置默认标头(如果不存在)

时间:2018-06-17 20:32:45

标签: java spring-boot

我编写了一个带有get请求映射的方法,它给出了用户列表。由于jakson绑定依赖性是在JSON中给出响应。我也依赖于XML,这是Jackson Dataformat XML。所以,如果Accept是application / json,它返回JSON中的响应,如果它在application / xml中,则返回XML.But默认情况下它给出了JSON响应。所以,如果不存在,我想添加接受标题,并将其默认值设为application / xml。

@GetMapping(path="/getAll")
    public List<User> getUsers(@RequestHeader(value= "Accept" ,required=false, defaultValue="application/xml") String Accept)
    {
        return service.findAll();
    }

但是在上面的情况下,标题没有设置。

2 个答案:

答案 0 :(得分:2)

为此,您需要修改控制器方法以返回ResponseEntity<List<User>>,如下所示:

@GetMapping(path="/getAll")
public ResponseEntity<List<User>> getUsers(@RequestHeader(value= "Accept" ,required=false, defaultValue="application/xml") String Accept) {

    HttpHeaders responseHeaders = new HttpHeaders();
    responseHeaders.setLocation(location);
    responseHeaders.set("Accept", "Value");
    return new ResponseEntity<List<User>>(service.findAll(), responseHeaders, HttpStatus.CREATED);
}

答案 1 :(得分:0)

如果您只想从Spring启动应用程序响应XML,请使用以下自定义webMvcConfiguration。设置一个默认的Accept标题只是为了响应XML似乎不是一个好主意。

@Configuration
public class WebMvcConfiguration {

    @Bean
    public WebMvcConfigurer myWebMvcConfigurer() {
        return new WebMvcConfigurerAdapter() {

            @Override
            public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
                configurer.defaultContentType(MediaType.APPLICATION_XML);
            }
        };
    }
}

如果您已使用自定义WebMvcConfigurerAdapter,请覆盖上述configureContentNegotiation(...)方法。