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

Java 在springboot应用程序中,如果不存在,如何设置默认标头,java,spring-boot,Java,Spring Boot,我已经编写了一个方法,它使用get-request映射提供用户列表。由于jakson绑定依赖性,因此在JSON中没有给出响应。我还依赖于XML,它是Jackson Dataformat XML。因此,如果Accept是application/json,它将以json返回响应,如果它是application/XML,它将以XML返回响应。但是默认情况下,它会给出json响应。所以,我想添加接受标题(如果不存在),并将其默认值设置为application/xml @GetMapping(path="

我已经编写了一个方法,它使用get-request映射提供用户列表。由于jakson绑定依赖性,因此在JSON中没有给出响应。我还依赖于XML,它是Jackson Dataformat XML。因此,如果Accept是application/json,它将以json返回响应,如果它是application/XML,它将以XML返回响应。但是默认情况下,它会给出json响应。所以,我想添加接受标题(如果不存在),并将其默认值设置为application/xml

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

但在上述情况下,标题未设置。

为此,您需要修改控制器方法以返回
响应属性,如下所示:

@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);
}
@GetMapping(path=“/getAll”)
public ResponseEntity getUsers(@RequestHeader(value=“Accept”,required=false,defaultValue=“application/xml”)字符串接受){
HttpHeaders responseHeaders=新的HttpHeaders();
负责人。设置位置(位置);
设置(“接受”、“值”);
返回新的ResponseEntity(service.findAll(),responseHeaders,HttpStatus.CREATED);
}

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

@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);
}
@GetMapping(path=“/getAll”)
public ResponseEntity getUsers(@RequestHeader(value=“Accept”,required=false,defaultValue=“application/xml”)字符串接受){
HttpHeaders responseHeaders=新的HttpHeaders();
负责人。设置位置(位置);
设置(“接受”、“值”);
返回新的ResponseEntity(service.findAll(),responseHeaders,HttpStatus.CREATED);
}

如果您只想从spring boot应用程序响应XML,请使用以下自定义
WebMVC配置
。设置一个默认的
Accept
头来响应XML似乎不是一个好主意

@Configuration
public class WebMvcConfiguration {

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

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

如果您已经在使用自定义的
WebMVCConfigureAdapter
,只需覆盖上面的
configureContentNegotiation(…)
方法。

如果您只想从spring boot应用程序响应XML,请使用以下自定义
WebMVCConfigureAdapter
。设置一个默认的
Accept
头来响应XML似乎不是一个好主意

@Configuration
public class WebMvcConfiguration {

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

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

如果您已经在使用自定义的
WebMVCConfigureAdapter
,只需覆盖上面的
configureContentNegotiation(…)
方法。

它还返回json响应。这是一种预期的行为。它还返回json响应。这是一种预期的行为。我还没有尝试过这种方法,但我的想法如下。也许我们可以使用一个过滤器来添加默认的标题值:我还没有尝试过这个方法,但我的想法是这样的。也许我们可以使用过滤器添加默认标题值,如下所示: