我有个后置拦截器。当控制层被执行并返回信息时,后拦截器将被执行。此时,全局异常处理将捕获后拦截器中的异常,并返回提示消息。使用postman来测试和控制层的信息,同时返回全局异常处理。这真的是退回的吗?我写了一个测试示例。相同情况下,只返回控制层信息。我认为它应该返回全局异常处理的信息。
控制器
@RestController
@RequestMapping("/v1/book")
@Validated
public class BookController {
private final BookService bookService;
public BookController(BookService bookService) {
this.bookService = bookService;
}
@GetMapping("/search")
public R searchBook(@RequestParam(value = "q", required = false, defaultValue = "") String q) {
return R.select(bookService.getBookByKeyword(q));
}
}拦截器
public class LogInterceptor extends HandlerInterceptorAdapter {
public LogInterceptor(LoggerResolver loggerResolver) {
this.loggerResolver = loggerResolver;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
// There will be a runtime exception here
}
}全局异常处理
@Order
@RestControllerAdvice
@Slf4j
public class RestExceptionHandler {
/**
* Exception
*/
@ExceptionHandler({Exception.class})
public R processException(Exception exception) {
log.error("", exception);
return R.error();
}
}结果
{
"code": 200,
"data": [
// ...
],
"type": "success",
"message": "OK"
}{
"code": 500,
"type": "error",
"message": "Internal Server Error"
}"R扩展HashMap",用于统一返回结构。
发布于 2021-04-12 19:04:28
看一下您的代码片段,我不确定searchBook和processException中的R是什么
试试这个(编辑processException以满足您的规格):
@GetMapping("/search")
public ResponseEntity<?> searchBook(@RequestParam(value = "q", required = false, defaultValue = "") String q) {
return new ResponseEntity<>(bookService.getBookByKeyword(q), HttpStatus.OK);
}
@ExceptionHandler({Exception.class})
public ResponseEntity<?> processException(Exception exception) {
return new ResponseEntity<>(new ErrorDTO(exception.getMessage()), HttpStatus.UNPROCESSABLE_ENTITY);
}https://stackoverflow.com/questions/67056888
复制相似问题