[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,
ConstraintViolationExceptionis thrown if there are validation errors. - If it's not present,
MethodArgumentNotValidExceptionis 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.