我一直无法在 ResponseEntityExceptionHandler 中捕获 ConstraintViolationException(或 DataIntegrityViolationException)。我想在响应中返回 jpa 失败(例如违反了哪个约束)。(我不喜欢在方法参数上使用 @Valid 并捕获 handleMethodArgumentNotValid )。
...
import org.hibernate.exception.ConstraintViolationException;
import org.springframework.dao.DataIntegrityViolationException;
@ControllerAdvice
public class PstExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler({ConstraintViolationException.class})
public ResponseEntity<Object> handleConstraintViolation(
ConstraintViolationException ex, WebRequest request) {
...
return new ResponseEntity<Object>(...);
}
}
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Entity
public class Student {
@Id
private Long id;
@NotNull
private String name;
@NotNull
@Size(min=7, message="Passport should have at least 7 characters")
private String passportNumber;
public Student() {
}
...
}
@RequestMapping(value = "/addstudent"...)
@ResponseBody
public ResponseEntity<Object> addStudent(@RequestBody StudentDto studentDto) {
Student student = new Student();
student.setId(studentDto.getId()); // 1L
student.setName(studentDto.getName()); // "helen"
student.setPassportNumber(studentDto.getPassportNumber()); // "321"
studentRepository.save(student);
return ResponseEntity.accepted().body(student);
}
谢谢你...
有3种方式:
@Valid
\@Validated
注释。
一旦它们在参数级别使用,就可以通过方法注入的Errors
\BindingResult
类型实现来获得违规。
ConstraintViolationException
每次将处于无效状态的实体传递给.save()
或.persist()
Hibernate 方法时都会抛出。
实体可以通过注入LocalValidatorFactoryBean.validate()
方法手动验证。然后通过传递的Errors
对象的实现可以使用约束违规。确切地说,@Valid
\@Validated
注释是如何在内部实现的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句