首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拦截器和全局异常处理

拦截器和全局异常处理
EN

Stack Overflow用户
提问于 2021-04-12 18:36:11
回答 1查看 35关注 0票数 0

我有个后置拦截器。当控制层被执行并返回信息时,后拦截器将被执行。此时,全局异常处理将捕获后拦截器中的异常,并返回提示消息。使用postman来测试和控制层的信息,同时返回全局异常处理。这真的是退回的吗?我写了一个测试示例。相同情况下,只返回控制层信息。我认为它应该返回全局异常处理的信息。

控制器

代码语言:javascript
复制
@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));
    }
}

拦截器

代码语言:javascript
复制
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
    }
}

全局异常处理

代码语言:javascript
复制
@Order
@RestControllerAdvice
@Slf4j
public class RestExceptionHandler {

    /**
     * Exception
     */
    @ExceptionHandler({Exception.class})
    public R processException(Exception exception) {
        log.error("", exception);
        return R.error();
    }
}

结果

代码语言:javascript
复制
{
    "code": 200,
    "data": [
        // ...
    ],
    "type": "success",
    "message": "OK"
}{
    "code": 500,
    "type": "error",
    "message": "Internal Server Error"
}

"R扩展HashMap",用于统一返回结构。

EN

回答 1

Stack Overflow用户

发布于 2021-04-12 19:04:28

看一下您的代码片段,我不确定searchBook和processException中的R是什么

试试这个(编辑processException以满足您的规格):

代码语言:javascript
复制
@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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67056888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档