J'utilise le projet de démarrage de démarrage au printemps, les données de chaîne de retour RestController.spring boot RestController get HttpServletResponse contenu
Je souhaite obtenir un contenu de réponse dans Filtre.
Mais ne peux pas obtenir, s'il vous plaît aidez-moi.
contrôleur:
@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();
}
}
Filtre:
@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 "";
}
}
}
poste à/services/exemple/get/test ne peux pas obtenir le contenu. mais la publication dans/service/example/get/test1 peut obtenir du contenu.
pourquoi?
Mon projet a beaucoup de repos comme/service/exemple/get/test, je ne veux pas changer chacun.
comment obtenir le contenu de la réponse dans le filtre, s'il vous plaît aider, merci !!!