我想抓住在持久化期间抛出的所有异常(特别是 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
答案 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();
}