【发布时间】:2019-08-20 18:11:06
【问题描述】:
我正在开发一个带有 servlet 过滤器的简单 Spring Boot 应用程序,旨在设置响应状态代码:
@Component
public class TestFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) resp;
response.setStatus(201);
chain.doFilter(req, resp);
}
如果控制器返回一个字符串,一切都会按预期进行(状态为 201)。但是如果控制器返回一个ResponseEntity,那么在调用doFilter()之后状态码是200而不是201:
@RestController
public class TestController {
@GetMapping("/string")
public String testString() {
return "OK"; // status code is 201 as set by Filter
}
}
@RestController
public class TestController {
@GetMapping("/entity")
public ResponseEntity<String> testResponseEntity() {
return ResponseEntity.ok("OK"); // status code is 200
}
}
为什么过滤器在使用 ResponseEntity 时不改变状态码?
--
Github 上的项目:https://github.com/timofeev-denis/set-status-code
【问题讨论】:
标签: java servlet-filters