私はスプリングブートビルドプロジェクト、RestControllerリターン文字列データを使用します。スプリングブートRestController get HttpServletResponse content
フィルタで応答コンテンツを取得します。
でも、私は助けてください。
コントローラ:
@RestController
@RequestMapping(value = "/service/example")
public class ExampleController {
@RequestMapping(value = "/get/test", method = RequestMethod.POST)
public String message(@RequestBody String data) {
return "test";
}
@RequestMapping(value = "/get/test1", method = RequestMethod.POST)
public void message(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter writer = response.getWriter();
writer.write("dfsfd");
writer.flush();
}
}
フィルタ:
@WebFilter(filterName="myFilter",urlPatterns="/service/*")
public class MyFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
MyHttpServletResponseWrapper responseWrapper = new MyHttpServletResponseWrapper(response);
filterChain.doFilter(request, responseWrapper);
String responseContent = responseWrapper.getContent();
System.out.println("response="+responseContent);
}
}
MyHttpServletResponseWrapper:カントは、コンテンツを取得/サービス/例/取得/試験に
public class MyHttpServletResponseWrapper extends HttpServletResponseWrapper {
private PrintWriter cachedWriter;
private CharArrayWriter bufferedWriter;
/**
* Constructs a response adaptor wrapping the given response.
*
* @param response The response to be wrapped
* @throws IllegalArgumentException if the response is null
*/
public MyHttpServletResponseWrapper(HttpServletResponse response) {
super(response);
bufferedWriter = new CharArrayWriter();
cachedWriter = new PrintWriter(bufferedWriter);
}
@Override
public PrintWriter getWriter() throws IOException {
return cachedWriter;
}
/**
* 获取原始HTML
*
* @return
*/
public String getContent() {
byte[] bytes = bufferedWriter.toString().getBytes();
try {
return new String(bytes, "UTF-8");
} catch (UnsupportedEncodingException e) {
return "";
}
}
}
ポスト。 ですが、/ service/example/get/test1に投稿するとコンテンツを取得できます。
なぜですか?
私のプロジェクトには/ service/example/get/testのような休憩がたくさんありますが、それぞれを変更したくありません。
フィルターの応答内容を取得する方法、お手数です、ありがとうございます!