StatusCode似乎ServeltAPI中,无论是FilterWrapperReponse,都没有提供get的方法。以下是一个从网上找到的解决方案。1.先实现一个对Response的包装器:publicclassStatusExposingServletResponseextendsHttpServletResponseWrapper{privateinthttpStatus;publicStatusExposingServletResponse(HttpServletResponseresponse){super(response);}@OverridepublicvoidsendError(intsc)throwsIOException{httpStatus=sc;super.sendError(sc);}@OverridepublicvoidsendError(intsc,Stringmsg)throwsIOException{httpStatus=sc;super.sendError(sc,msg);}@OverridepublicvoidsetStatus(intsc){httpStatus=sc;super.setStatus(sc);}publicintgetStatus(){returnhttpStatus;}}2,然后实现一个Filter来替换原始的HttpServletResponse,这样你就可以在Filter里面取到statusCode了publicclassStatusReportingFilterimplementsFilter{publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException{StatusExposingServletResponseresponse=newStatusExposingServletResponse((HttpServletResponse)res);chain.doFilter(req,response);intstatus=response.getStatus();//report在这儿你就得到状态码了。}publicvoidinit(FilterConfigconfig)throwsServletException{//empty}publicvoiddestroy(){//empty}}
|