当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Boot Filter中获取和设置响应体

晏经武
2023-03-14
@RestController
public class XxxController {

    public void ResponseEntity(ClientRequest clientRequest) {
         ...
         return ResponseEntity.ok(clientResponse);
    }
}
@Component
public class MyClassFilter implements Filter {


    @Override
    public void doFilter( HttpServletRequest req,  HttpServletResponse res, FilterChain chain) throws IOException, ServletException {
 
    }

    @Override
    public void destroy() {}

    @Override
    public void init(FilterConfig arg0) throws ServletException {}

}

共有1个答案

曾永新
2023-03-14

不确定在过滤器中获得响应是什么意思。在筛选器中,请求尚未传递给控制器,因此还没有响应。不过你可以得到请求。但是请注意不要读取请求,因为在这种情况下,请求流将在过滤器中读取,当它到达控制器时,整个请求流将已经被读取。若要设置响应,可以执行以下操作:

protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
    response.resetBuffer();
    response.setStatus(HttpStatus.OK);
    response.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
    response.getOutputStream().print(new ObjectMapper().writeValueAsString(myData));
    response.flushBuffer(); // marks response as committed -- if we don't do this the request will go through normally!
}

您可以在这里看到为什么必须刷新响应。您还可以执行senderrorHttpServletResponse#senderror如何更改ContentType

如果不刷新响应,则请求将继续沿着筛选器链向下(必须添加chain.dofilter(request,response);当然!)。

 类似资料:
  • 有一个需要实现的REST APIendpoint用于获取一些信息并将后端请求发送到另一个服务器,来自后端服务器的响应必须设置为最终响应。我的问题是如何在javax.ws.rs.core.响应中设置响应体? 这里的消息是我需要设置的。但是我尝试了几种方法。没有一个奏效。

  • 我从服务器得到这样的响应: 但打印fetch API捕获中的err只会返回错误对象。 它打印了这个(来自谷歌浏览器): 我想得到正确的错误处理状态代码,就像服务器没有响应一样。 在这种情况下,有没有办法获取响应数据?否则,我可以尝试什么替代方案? 任何建议都将不胜感激!

  • 我正在使用SpringCloudGateway过滤器,需要让响应主体记录它。我知道这是有问题的,因为SpringGateway是建立在SpringReactor上的,但我仍在寻找实现这一点的方法。 有全局过滤器,代码: 在控制台中,我只得到这个输出大约30次,没有输出短语“应用方法”。

  • 问题内容: 这是我的代码: 但是,当我从浏览器向服务器发出请求时,出现此错误: 我也尝试过这种方法,在请求之后设置响应头: 没有骰子。我犯了同样的错误。有没有一种方法可以只在route函数中设置响应头?这样的事情将是理想的: 但我还是找不到这样做。请帮忙。 编辑 如果我使用POST请求卷曲URL,如下所示: 我得到这个回应: 有任何想法吗? 问题答案: 你可以很容易地做到这一点: 查看和 但是有些

  • 问题内容: 有一个页面(URL),我通过XMLHttpRequest请求它,但是我没有从所请求的URL获得响应,而是将请求定向到另一个页面, 请求-> page.php* 从> directedpage.php 获得响应 * 问题是如何获取响应网址?(例如directedpage.php) 问题答案: 最终URL(在所有重定向之后)在实例的属性中可用。此功能是新增功能,仅在2014年9月[参考]稳

  • 我在用放心做API自动化。我想从API响应中获取值并传递给另一个java类, 这是我的测试类, 如何将此方法更改为另一种类型的无效值,或者如何在另一个java类中传递人员引用值