如何在 Spring Boot rest 服务方法中设置响应头值?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/45152484/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to set respond header values in Spring Boot rest service method?
提问by user2868835
Newbie question... I'm building my first Spring Boot restful service. My restful service design requires some data to be returned in the response header.
新手问题...我正在构建我的第一个 Spring Boot 宁静服务。我的宁静服务设计需要在响应头中返回一些数据。
How do I set response header values inside my controller class method?
如何在我的控制器类方法中设置响应头值?
回答by Matias Elorriaga
From the Spring Documentation:
来自 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);
}
Source: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/ResponseEntity.html
来源:https: //docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/ResponseEntity.html
回答by Abhijit Sarkar
Unlike the other answer, don'tuse HttpServletResponse. You don't wanna be working with low-level Servlet APIs if you can avoid it. Return a ResponseEntityor HttpEntity.
与其他答案不同,不要使用HttpServletResponse. 如果可以避免的话,您不想使用低级 Servlet API。返回一个ResponseEntity或HttpEntity.
HttpHeaders headers = new HttpHeaders();
headers.add("1", "uno");
return new ResponseEntity<>(headers, HttpStatus.OK);
回答by Luc S.
I was looking for an answer, and I don't like to have to create a response entity. I found the solution on the spring-forums, so credits to the writer.
我一直在寻找答案,但我不想创建响应实体。我在 spring-forums 上找到了解决方案,因此感谢作者。
In short, you can request the response in the method-declaration, so this can be populated.
简而言之,您可以在方法声明中请求响应,因此可以填充它。
A simple example:
一个简单的例子:
@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;
}
Hope this helps others as well.
希望这对其他人也有帮助。
回答by singhpradeep
To set Response Header there are multiple ways:
设置响应头有多种方法:
- As mentioned by @Matias Elorriaga, you can use this to add header to single response.
- Or, To add header to all responsesyou can also add java Filters.
- 正如@Matias Elorriaga 所提到的,您可以使用它向单个响应添加标头。
- 或者,要向所有响应添加标头,您还可以添加 Java 过滤器。
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() {
}
}
- Or,In Spring 5, you can also have WebFilter to add headers to all responses.
- 或者,在 Spring 5 中,您还可以让 WebFilter 向所有响应添加标头。
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);
}
}

