在使用约束验证注释(@Min、@NotNull、...)验证原始类型或其等效项(整数、布尔值)时,Spring Boot 抛出ConstraintViolationException. 但是当使用@Valid注释验证参数时,则MethodArgumentNotValidException抛出。
我有一个注释的类@ControllerAdvice来处理来自控制器的异常。问题是,根据spring-boot-starter-parent版本的不同,结果会大不相同。在使用该版本时,2.0.5.RELEASE我只需要为ConstraintViolationException该类包含一个处理程序。但是还有一些其他版本也MethodArgumentNotValidException被抛出。
它已经在GitHub 问题上提到过,但没有有用的答案......
我将在这里使用 lukasniemeier-zalando 的例子。有关更多详细信息,请单击上面的链接。
@Validated // needed to actually trigger validation
@RestController
class MyController {
@RequestMapping
Response serve(
@RequestParam @Min(2) Integer parameter, // throws ConstraintViolationException
@RequestBody @Valid BodyModel body // throws MethodArgumentNotValidException
) {
return new Response();
}
}
Run Code Online (Sandbox Code Playgroud)
我希望两个验证都抛出相同的异常,无论是哪一个,只是为了保持一致。
显然没有理由像这样,至少这是我从另一个GitHub 问题中了解到的。
然后我只想知道为什么 Spring Boot 会抛出 2 种类型的异常来表示相同的问题(参数验证)。
注:为使用的版本之前所提到的,2.0.5.RELEASE的spring-boot-starter-parent它不会发生。 …
spring-boot ×1