Calling ApiVersionConfigurer.setVersionRequired(true) in a Spring MVC application should a MissingApiVersionException to be thrown when the version is not found.
This currently doesn't appear to be the case, at least in Spring MVC.
I think the cause is this line where getDefaultVersion() is called but validateVersion is not called meaning these lines are not called.
Comment From: philwebb
This issue was noticed by @belyaev-andrey
Comment From: rstoyanchev
Setting defaultVersion implicitly turns off versionRequired. Having a default version assigned to every request in effect means there is always a version. This is mentioned in the Javadoc and is common in other places like the required flag and defaultValue on @RequestParam and other controller method parameter annotations.
In other words this is expected behavior.
Comment From: rstoyanchev
Once #35387 it should make it impossible to have both required=true and a default version set.
Comment From: philwebb
I don't think I specified the default version, I'm pretty sure default version was null and setVersionRequired was true.
When debugging, it seemed that in
https://github.com/spring-projects/spring-framework/blob/d8804c798b821cca14810e2c602f24de16c8d642/spring-web/src/main/java/org/springframework/web/accept/ApiVersionStrategy.java#L71-L75)
It called resolveVersion which returned null, then it called getDefaultVersion() which also returned null. It then returns null immediately, so it never calls the validation logic.
Comment From: rstoyanchev
Oh I see now. Yes that looks wrong.
Comment From: rstoyanchev
Looks like it was introduced in M7 with ffdf941219954ba6603d6d612d70597029221b6e.