小编Den*_*nis的帖子

当控制器返回ResponseEntity时,如何在Filter中设置响应状态代码?

我正在开发一个带有 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);
    }
Run Code Online (Sandbox Code Playgroud)

如果控制器返回一个字符串,一切都会按预期进行(状态为 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 …
Run Code Online (Sandbox Code Playgroud)

java servlet-filters

7
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×1

servlet-filters ×1