我有一个实体
@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();
// ...
}
编辑:在方法的主体中,可以对提取的消息执行操作,并返回响应或重新显示自定义异常。