本文主要是介绍SpringBoot 的 Filter 不慎操作会导致请求结果有两次返回,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
SpringBoot 的 Filter 不慎操作会导致请求结果有两次返回
问题描述
如题,有时候,我们会遇到使用 Postman 测试在 Spring Boot 的后端 request 一次但是 response 有两次(或者多次)返回结果的情况(即返回的 response 里有两个 json 体)。一种可能导致这种情况的原因便是 Filter 编写的问题。
原因解释
package servletbean;
public class encodefilter implements Filter {public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {if(request.getCharacterEncoding()==null) {System.out.println(encoding);request.setCharacterEncoding(encoding);}chain.doFilter(request, response);//到下一个链}public void init(FilterConfig fConfig) throws ServletException {this.config=fConfig;encoding=fConfig.getInitParameter("encoding");//获得目标编码格式}
}
上面是一个 Filter 的例子,我们需要注意到的一个点是 chain.doFilter
会将请求转发给过滤器链下一个 Filter,并且这个方法并不会return
,所以 doFilter
之后,后续的代码依旧会执行。
如果在 doFilter
后并没有 return
,而且你的 Filter 里恰好存在多个 do.Filter
,就会导致请求的结果返回多个 json 体。
所以,请务必确保 doFilter
后一定要 return
。
chain.doFilter(request, response);//到下一个链
return;
参考链接
chain.doFilter(request,response)含义
这篇关于SpringBoot 的 Filter 不慎操作会导致请求结果有两次返回的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!