小编rfm*_*mac的帖子

为什么 Spring Boot 会为 Controller 方法参数验证抛出不同的异常?

在使用约束验证注释(@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.RELEASEspring-boot-starter-parent它不会发生。 …

spring-boot

7
推荐指数
1
解决办法
2690
查看次数

标签 统计

spring-boot ×1