gpt4 book ai didi

java - ConstraintViolationException 和 MethodArgumentNotValidException 之间有什么区别

转载 作者:行者123 更新时间:2023-11-30 05:33:52 32 4
gpt4 key购买 nike

当我在 javax.validation 中使用 @Valid 注释验证 bean 时,对于某些对象,我收到 ConstraintViolationException ,对于某些对象,我收到 ConstraintViolationException获取 MethodArgumentNotValidException

据我了解,如果我在 Controller 中验证 @ResponseBody 中的任何内容,它会抛出 MethodArgumentNotValidException

但是对于类级别的某些自定义验证(例如@MyCustomValidation),它会抛出ConstraintViolationException,即使它正在@ResponseValidation 中进行验证。

对于不同 REST 端点的其他一些自定义验证,它会抛出 MethodArgumentNotValidException

我发现理解它的行为有点困难。

@PostMapping(path = "/someEndPoint")    
@Validated(OnASave.class)
public ResponseEntity<ClassA> saveObjA(@Valid @RequestBody ClassA objA)

Result - throws MethodArgumentNotValidException

@PostMapping(path = "/someOtherEndPoint")   
@Validated(OnBSave.class)
public ResponseEntity<ClassB> saveObjB(@Valid @RequestBody ClassB objB)

Result - throws ConstraintViolationException

ClassAClassB 都有自定义验证。

最佳答案

当您使用@Valid时,您正在应用您在模型类字段上定义的验证,虽然有不同类型的验证,您可以选择@NotNull,@Max,@Min等,您将获取匹配的类型。

一般来说,所有这些都与 MethodArgumentNotValidException 并行,在所有情况下都会抛出该异常。

摘自官方文档

Exception to be thrown when validation on an argument annotated with @Valid fails.

当违反某些约束时,Hibernate 实体管理器会抛出 ConstraintViolationException,因此这意味着您违反了正在使用的某些实体中的某些字段。

关于java - ConstraintViolationException 和 MethodArgumentNotValidException 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57010688/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com