DataIntegrityViolationException

DataIntegrityViolationException

我有一个实体

@Entity
class Person{
    @Id
    @GeneratedValue
    private long id;

    @Column(nullable = false, length = 10)
    private String name;
}

现在,当name为空或其长度大于10时,jpa抛出DataIntegrityViolationException
有什么方法可以分辨它吗?
我有顾问控制器
@ControllerAdvice
public class ExceptionHandlers {
    @ExceptionHandler(value =  DataIntegrityViolationException.class)
    public ResponseEntity<ErrorsMessage> handleViolation(DataIntegrityViolationException e ){
      return new ResponseEntity(ErrorMessage(value),HttpStatus.BAD_REQUEST)
    }
}

我要做的是设置errorMessage对象的value,当name为空时返回“null parameter”,如果name大于10,则将值设置为long parameter
有什么方法可以分辨它吗?
谢谢你的帮助!

最佳答案

有关约束冲突的信息包含在异常本身中,可以通过获取most specific casue及其消息来提取:

@ExceptionHandler(value =  DataIntegrityViolationException.class)
public ResponseEntity<ErrorsMessage> handleViolation(DataIntegrityViolationException e ){
    String message = e.getMostSpecificCause().getMessage();
    // ...
}

编辑:在方法的主体中,可以对提取的消息执行操作,并返回响应或重新显示自定义异常。

08-05 09:17