[BUG][SPRING] Spring's validation behavior is different depending on how annotations are used
Created by: lehphyro
Description
Spring's behavior is different depending on whether @Validated
is present on the class-level:
- If it's present,
ConstraintViolationException
is thrown if there are validation errors. - If it's not present,
MethodArgumentNotValidException
is thrown if there are validation errors.
This affects the way validation errors are converted to response to clients because the conversion implementation needs to be completely different.
openapi-generator version
openapi-generator-maven-plugin:4.1.2
Command line used for generation
Plugin configuration used:
<configuration>
<inputSpec>${project.basedir}/../../api/service-api/src/main/resources/openapi.yaml</inputSpec>
<output>${project.build.directory}/generated-sources/api</output>
<generateSupportingFiles>true</generateSupportingFiles>
<generatorName>spring</generatorName>
<strictSpec>true</strictSpec>
<configOptions>
<apiPackage>mypackage</apiPackage>
<modelPackage>mypackage</modelPackage>
<library>spring-mvc</library>
<dateLibrary>legacy</dateLibrary>
<interfaceOnly>true</interfaceOnly>
<skipDefaultInterface>true</skipDefaultInterface>
<useBeanValidation>true</useBeanValidation>
<useTags>true</useTags>
<java8>true</java8>
<useOptional>false</useOptional>
</configOptions>
</configuration>
Steps to reproduce
Just enable or disable useBeanValidation
to see that @Validated
gets added to the Api interface.
Suggest a fix
Add a flag to indicate whether class-level @Validated
should be added and make it true
by default to maintain backwards compatibility.