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

Spring-我如何添加一个头到我返回的所有响应?

慕河
2023-03-14

假设我有一个Spring REST API,它在整个代码中返回了很多很多响应。

如果我想在发出的每一个响应中返回两个特定的头,我该如何以比在返回之前手动将它们添加到每一个响应中更智能的方式做到这一点呢?

有没有一种机制可以让我在发送之前捕捉响应,并添加报头?

共有1个答案

宰父单弓
2023-03-14

正确的答案是使用过滤器。拦截器对此是不正确的,不管网上的人怎么说。拦截器只是不能像预期的那样工作。

工作解决方案是创建一个过滤器,如下所示:

public class myAwesomeFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request,
                                HttpServletResponse response, FilterChain filterChain)  throws ServletException, IOException {

        response.addHeader("Cache-Control", "no-cache, no-store, must-revalidate");
        response.addHeader("pragma", "no-cache");
        filterChain.doFilter(request, response);
    }
}

然后,在web.xml中--您需要以下内容:

<filter>
    <filter-name>sensitiveFormHeaderFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
 类似资料:
  • 问题内容: 可以说我有一个Spring REST API,该代码在整个代码中都有很多返回。 如果我想在发送的每个响应中都返回两个特定的标头,那么与返回之前手动将其手动添加到每个响应中相比,我如何以一种更智能的方式来做到这一点? 有没有一种机制可以让我在发送响应之前捕获响应并添加标题? 编辑:对于未来的访客问这个问题。这里没有任何答案实际上会导致拦截器正常工作。我建议去别处。 问题答案: 正确的答案

  • 我想将集成测试添加到我的Gradle构建(版本1.0)中。它们应该与我的正常测试分开运行,因为它们需要将webapp部署到localhost(它们测试那个webapp)。测试应该能够使用在我的主源集中定义的类。我该怎么做?

  • 如果用户没有输入我编码的两个名称,我如何改变/更新以下来自spring MVC的REST调用以返回一个错误…像是找不到的东西?

  • 有没有其他方法可以在Controller后面添加header?

  • 当我使用System.out.println静态方法时,下面的Java程序显示ArrayList中的所有元素。但是,当我在方法中返回列表时,它只显示ArrayList中的一个元素。我希望你能给我一些指点,让我知道你做错了什么: