При проверке типа примитива или его эквивалента (Integer, Boolean) с использованием аннотаций проверки ограничений (@Min, @NotNull, ...) Spring Boot генерирует ConstraintViolationException
.Но при проверке параметра с использованием аннотации @Valid
создается MethodArgumentNotValidException
.
У меня есть класс, помеченный @ControllerAdvice
для обработки исключений из контроллеров.Проблема в том, что в зависимости от версии spring-boot-starter-parent
результаты могут сильно отличаться.При использовании версии 2.0.5.RELEASE
мне просто нужно было включить обработчик для класса ConstraintViolationException
.Но есть и другие версии, к которым также добавляется MethodArgumentNotValidException
.
Это уже упоминалось в выпуске GitHub , но без полезного ответа ...
I 'Я воспользуюсь примером 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();
}
}
Я ожидаю, что обе проверки выдают одно и то же исключение, независимо от того, какая из них, просто для согласованности.
Очевидно, что нет никаких причинчтобы это было похоже на это, по крайней мере это было то, что я понял из этой другой проблемы GitHub .
Тогда я просто хочу получить ответ, почему Spring Boot генерирует 2 типа исключений для представленията же проблема (проверка аргумента).
Примечание : как упоминалось ранее, при использовании версии 2.0.5.RELEASE
spring-boot-starter-parent
этого не происходит.
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
Но, как сообщалось в последней проблеме GitHub, которую я связал, версия 2.0.0.M4
имеет такое поведение, и я также испытал ее с версией 2.2.0.M3
.