Java 在springboot应用程序中,如果不存在,如何设置默认标头
我已经编写了一个方法,它使用get-request映射提供用户列表。由于jakson绑定依赖性,因此在JSON中没有给出响应。我还依赖于XML,它是Jackson Dataformat XML。因此,如果Accept是application/json,它将以json返回响应,如果它是application/XML,它将以XML返回响应。但是默认情况下,它会给出json响应。所以,我想添加接受标题(如果不存在),并将其默认值设置为application/xmlJava 在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="
@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响应。这是一种预期的行为。我还没有尝试过这种方法,但我的想法如下。也许我们可以使用一个过滤器来添加默认的标题值:我还没有尝试过这个方法,但我的想法是这样的。也许我们可以使用过滤器添加默认标题值,如下所示: