Spring Data REST @ExceptionHandler

时间:2017-07-01 07:57:17

标签: java spring hibernate exception-handling spring-data-rest

我想抓住在持久化期间抛出的所有异常(特别是 org.hibernate.exception.ConstraintViolationException )。 我使用Spring框架4.3.8 Spring Data REST 2.6.3和Spring Data Jpa 1.11 + Hibernate 5.2.8。我的想法是利用@ControllerAdvice(或@RestController Advice)和@ExceptionHandler(Throwable.class) - 但我无法抓住该死的异常。 请告诉我,我的想法是错误的。

好吧,我会让问题变得更容易。为什么要赢得这个异常处理工作? (路由/ users / hello虽然可以完美无缺。)​​

Java

2 个答案:

答案 0 :(得分:1)

我已经解决了这个问题。 我的应用程序主要配置是:

@Configuration
// other neccessary annotations
public class RestApplicationConfig extends RepositoryRestMvcConfiguration {
}

该项目纯粹是Spring Data Rest 。 要使用@ExceptionHandler功能,您需要运行Spring Web MVC 。 您可以通过以下任一方式执行此操作:

1)将RepositoryRestMvcConfiguration导入主Spring Web MVC配置:

@Configuration
@EnableWebMvc
// other neccessary annotations
@Import(RepositoryRestMvcConfiguration.class)
public class WebMvcConfig extends WebMvcConfigurerAdapter{}

2)使用@EnableWebMvc注释作为主配置文件时,您有一个扩展RepositoryRestMvcConfiguration类的类:

@Configuration
@EnableWebMvc
// other neccessary annotations
public class RestApplicationConfig extends RepositoryRestMvcConfiguration {}

值得一提的是,在Spring Data REST中有一个标准的RepositoryRestExceptionHandler类,它默认处理所有主要的异常类型并记录它们。因此,除非您需要更个性化的内容,否则您基本上不需要创建自己的处理程序。

答案 1 :(得分:0)

怎么样:

@ExceptionHandler(org.hibernate.exception.ConstraintViolationException.class)
public String logErrors(Exception e) {
    return "error: " +e.getMessage();
}