【发布时间】:2019-12-07 12:02:41
【问题描述】:
第 1 步:
在preHandle(HttpServletRequest request, HttpServletResponse 响应,对象处理程序){},如下所示
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
ServletContext query = request.getServletContext();
BufferedReader br = request.getReader();
StringBuilder sb = new StringBuilder();
String s = "";
while((s = br.readLine())!=null) {
sb.append(s);
}
System.out.println(sb.toString());
return true;
}
第 2 步: 一旦 preHandle(request, response) 方法作业完成然后请求控制到达 Rest Controller 所以这里的请求正文为空
@PostMapping(value = "/addOrRemoveCustomer", produces = { "application/json" }, consumes = {"application/json" })
public ResponseEntity<Object> addOrRemoveCustomer(@RequestBody Map<String, Object> requestBody) {
logger.debug("addOrRemoveCustomer : addOrRemoveCustomer() start....");
Object requestData = null;
try {
requestData = customerService.addOrRemoveCustomer(requestBody);
} catch (BusinessException e) {
BusinessException businessException = new BusinessException(e);
return new ResponseEntity<Object>(businessException.getErrorResponse(),
Utils.getHttpStatus(e.getErrorCode()));
} catch (Exception e) {
BusinessException businessException = new BusinessException(
"Error in addOrRemoveCustomer service get call", e);
return new ResponseEntity<Object>(businessException.getErrorResponse(), HttpStatus.INTERNAL_SERVER_ERROR);
}
logger.debug("addOrRemoveCustomer Contoller : addOrRemoveCustomer() end...");
return new ResponseEntity<Object>(requestData, Utils.getHttpStatus("200"));
}
在 Rest 控制器中,requestData 为 null 因为已经在拦截器中读取了 requestData(BufferedReader br = request.getReader();),所以现在需要在 Rest 控制器中再次读取请求体数据?
如何达到上述要求?
提前致谢!!!
【问题讨论】:
标签: spring servlets interceptor servlet-filters