【问题标题】:global exception handling for rest exposed spring-data其余暴露的弹簧数据的全局异常处理
【发布时间】:2015-06-02 14:47:15
【问题描述】:

使用 spring-data-rest 来公开我想要覆盖默认异常处理的存储库。

阅读文档在我看来,最好的方法是使用 @ControllerAdvice 带注释的类

@ControllerAdvice
class GlobalControllerExceptionHandler extends ResponseEntityExceptionHandler {

    Logger log = LoggerFactory.getLogger(GlobalControllerExceptionHandler.class);

    @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler(Exception.class)
    public ResponseEntity<Object> badRequest(HttpServletRequest req, Exception exception) {
        log.info("++++ GLOBAL EXCEPTION HANDLING ++++");
        return null;
    }
}

有几点我不确定:

  • 我应该扩展 ResponseEntityExceptionHandler,其他类,什么都没有?
  • 我应该返回 ResponseEntity 对象,其他类吗?

顺便说一句,即使我尝试了不同的配置,这似乎也不起作用。有没有办法在 spring-data-rest 中自定义错误处理?

【问题讨论】:

  • “这似乎不起作用”是什么意思?抛出异常时是否没有调用 badRequest,或者您遇到了一些错误?
  • 对不起...我的意思是 badRequest 没有被调用
  • 你在使用@EnableAutoConfiguration吗?查看主要配置会很有帮助。也很好奇这个类是否与该配置在同一个包中,因为这个类是包私有的。
  • 这个类在应用程序的一个子包中,因为我希望 spring 上下文扫描所有这些子包......我错了吗? ...顺便说一句,是的,我正在使用 EnableAutoConfiguration
  • 对包进行组件扫描,但组件扫描不可见;在 java 中,你要么在同一个包中,要么不在——从可访问性的角度来看,确实没有“子包”这样的东西

标签: spring-boot spring-data-rest


【解决方案1】:

缺少RepositoryRestExceptionHandler。会是这样的:

像这样:

@ControllerAdvice(basePackageClasses = RepositoryRestExceptionHandler.class)
public class GlobalControllerExceptionHandler {

    Logger log = LoggerFactory.getLogger(GlobalControllerExceptionHandler.class);

    @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler(Exception.class)
    public ResponseEntity<Object> badRequest(HttpServletRequest req, Exception exception) {
        log.info("++++ GLOBAL EXCEPTION HANDLING ++++");
        return null;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2016-11-03
    • 2018-04-24
    • 1970-01-01
    相关资源
    最近更新 更多