Java @ExceptionHandler不适用于特定的hibernate异常

Java @ExceptionHandler不适用于特定的hibernate异常,java,spring,hibernate,uitableview,exception-handling,Java,Spring,Hibernate,Uitableview,Exception Handling,我试图捕获一些内部异常,然后用更好的消息提示最终用户。但在这个例外情况下: 异常堆栈跟踪 @ExceptionHandler(值={javax.validation.ConstraintViolationException.class, org.hibernate.exception.ConstraintViolationException.class})似乎没有按预期工作 我刚刚检查了这一点,指出当与常规处理程序一起使用时,应该处理特定的异常处理程序 @RestControllerAdvice

我试图捕获一些内部异常,然后用更好的消息提示最终用户。但在这个例外情况下:

异常堆栈跟踪

@ExceptionHandler(值={javax.validation.ConstraintViolationException.class,
org.hibernate.exception.ConstraintViolationException.class})
似乎没有按预期工作

我刚刚检查了这一点,指出当与常规处理程序一起使用时,应该处理特定的异常处理程序

@RestControllerAdvice
@Slf4j
public class GlobalControllerExceptionHandler {

    @ExceptionHandler(value = {javax.validation.ConstraintViolationException.class,
            org.hibernate.exception.ConstraintViolationException.class})
    public void constraintViolationException(Exception ex,
                                                      WebRequest req) {
        log.error("Constraint violation while processing {}", req.toString());
    }



    @ExceptionHandler(value = {Exception.class})
    public void unknownException(Exception ex, WebRequest req) {
        log.error("Unknown Internal Exception happens");
    }
}
而且这也使得多个异常可以在单个处理程序中处理

@RestControllerAdvice
@Slf4j
public class GlobalControllerExceptionHandler {

    @ExceptionHandler(value = {javax.validation.ConstraintViolationException.class,
            org.hibernate.exception.ConstraintViolationException.class})
    public void constraintViolationException(Exception ex,
                                                      WebRequest req) {
        log.error("Constraint violation while processing {}", req.toString());
    }



    @ExceptionHandler(value = {Exception.class})
    public void unknownException(Exception ex, WebRequest req) {
        log.error("Unknown Internal Exception happens");
    }
}

有什么我错过了,谢谢你提供的有用的细节

您试图处理一个
DataIntegrityViolationException
,但您的异常处理程序只处理
ConstraintViolationException
s

将异常类型添加到处理程序:

@ExceptionHandler({
    javax.validation.ConstraintViolationException.class,
    org.hibernate.exception.ConstraintViolationException.class,
    org.springframework.dao.DataIntegrityViolationException})

清理类路径并重新编译类,然后在类路径未更新的情况下运行。请添加完整的stacktrace以识别问题。。。看起来你放在这里的代码有一半…@Vikrant我刚刚添加了更多的细节,对于这个案例,你会怎么说?谢谢你的帮助。我刚试过,但也不行。正如我所提到的,嵌套异常应该能够被检测和处理。