This is because spring boot sets up various ViewResolvers based on what is available in the classpath. If a speed dependency is found in the classpath, spring will configure VelocityViewResolver, but at the same time it also sets up other resolving views, ContentNegotiationViewResolver is one of them.
ContentNegotiationViewResolver tries to match the view name and MIME type to automatically determine the best view. In this process, he tries to find XXX.vm.html and therefore throws an exception.
To fix this, adjust your viewing permissions manually. See http://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-switch-off-default-mvc-configuration
I set up my viewResolvers manually by introducing the following class, and the problem went away.
@Configuration @EnableWebMvc public class MvcConfiguration extends WebMvcConfigurerAdapter{ @Autowired private final ResourceLoader resourceLoader = new DefaultResourceLoader(); @Bean public VelocityConfig velocityConfig() { VelocityConfigurer cfg = new VelocityConfigurer(); cfg.setResourceLoader(resourceLoader); cfg.setResourceLoaderPath("classpath:/templates/") return cfg; } @Bean public ViewResolver viewResolver() { VelocityViewResolver resolver = new VelocityViewResolver(); resolver.setViewClass(VelocityToolboxView.class); resolver.setPrefix(""); resolver.setSuffix(".vm"); return resolver; } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { final String[] CLASSPATH_RESOURCE_LOCATIONS = [ "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" ]; registry.addResourceHandler("/**").addResourceLocations( CLASSPATH_RESOURCE_LOCATIONS); } }
source share