如何在Spring Boot rest服务方法中设置响应头值?
新手问题。。。我正在构建我的第一个Spring Boot restful服务。我的restful服务设计要求在响应头中返回一些数据如何在Spring Boot rest服务方法中设置响应头值?,spring,spring-boot,Spring,Spring Boot,新手问题。。。我正在构建我的第一个Spring Boot restful服务。我的restful服务设计要求在响应头中返回一些数据 如何在控制器类方法中设置响应头值?来自Spring文档: @RequestMapping("/handle") public ResponseEntity<String> handle() { URI location = ...; HttpHeaders responseHeaders = new HttpHeaders();
如何在控制器类方法中设置响应头值?来自Spring文档:
@RequestMapping("/handle")
public ResponseEntity<String> handle() {
URI location = ...;
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setLocation(location);
responseHeaders.set("MyResponseHeader", "MyValue");
return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
}
@RequestMapping(“/handle”)
公共响应句柄(){
URI位置=。。。;
HttpHeaders responseHeaders=新的HttpHeaders();
负责人。设置位置(位置);
responseHeaders.set(“MyResponseHeader”、“MyValue”);
返回新的ResponseEntity(“Hello World”,responseHeaders,HttpStatus.CREATED);
}
来源:与其他答案不同,不要使用
HttpServletResponse
。如果可以避免的话,您不想使用低级Servlet API。返回或HttpEntity
HttpHeaders headers = new HttpHeaders();
headers.add("1", "uno");
return new ResponseEntity<>(headers, HttpStatus.OK);
HttpHeaders=newhttpheaders();
标题。添加(“1”、“uno”);
返回新的响应属性(标题,HttpStatus.OK);
我在寻找答案,我不想创建响应实体。我在春季论坛上找到了解决方案,这要归功于作者
简而言之,您可以在方法声明中请求响应,这样就可以填充响应
一个简单的例子:
@RequestMapping(value="/car/{carId}", method = RequestMethod.Get)
@ResponseBody
public Car getCarById(@PathVariable("carId") String Id, HttpServletResponse response) {
response.setHeader("X-Special-Header", myCar.getEcoLabel());
//get the car
return myCar;
}
希望这对其他人也有帮助
要设置响应标题,有多种方法:
无法理解此方法应在何处出现。我按照此页面创建服务,需要让响应消息包含标题“Access Control Allow Origin”。不要返回“Greeting”对象,而是返回一个ResponseEntity,以Greeting对象为主体,还可以将标题添加到响应实体。看看可用的构造函数,我同意你的观点,使用低级servlet API会给我带来一些问题,你的解决方案非常棒。谢谢。我最近升级到了Spring boot 1.4.7,现在这个方法没有传递一些设置的头(以前是有效的)。它被认为是不受欢迎的还是1.4.7中有一个bug?@nafas我建议用更多的信息来回答一个新问题,而不是“不起作用”。这个答案在写出来的时候解决了原来的问题;它不能保证在接下来的100年里继续工作。
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
@javax.servlet.annotation.WebFilter(urlPatterns = {"/*"})
@Component
public class ResponseHeaderFilter implements javax.servlet.Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
res.setHeader("My-Custom-Header", "Header-Value-Here");
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;
@Component
public class ResponseHeaderWebFilter implements WebFilter {
@Override
public Mono filter(ServerWebExchange exchange, WebFilterChain chain) {
exchange.getResponse().getHeaders().add("My-Custom-Header", "My-Value-Here");
return chain.filter(exchange);
}
}