2016-01-26 9 views
5

Uso i modelli Velocity insieme all'avvio di Spring.ERRORE org.apache.velocity: ResourceManager: impossibile trovare la risorsa 'xxx.html.vm' in qualsiasi caricatore di risorse

Quando esiste un file denominato "xxx.vm" nella directory dei modelli, Spring Boot carica correttamente "xxx.vm". Tuttavia, viene registrato un messaggio ERRORE di seguito.

"ERRORE org.apache.velocity: ResourceManager: impossibile trovare la risorsa 'xxx.html.vm' in qualsiasi caricatore di risorse."

Non capisco il motivo per cui il sistema cerca 'xxx.html.vm' perché il suffisso nei application.properties è impostato su ".vm"

Ecco configurazione in application.properties

spring.velocity.enabled=true 
spring.velocity.resource-loader-path=classpath:/templates/ 
spring.velocity.suffix=.vm 

Non c'è alcun problema con l'esecuzione della mia applicazione, ma mi piacerebbe sapere che cosa causa questo messaggio di errore. Potresti per favore aiutarmi ad affrontare questo? Grazie in anticipo.

+0

avete risolto il problema? Ho lo stesso errore sui miei registri :-( –

risposta

3

Aggiungere la seguente riga alla application.properties:

spring.velocity.view-names=xxx,yyy,zzz 
+2

Questo è davvero strano, nel mio caso ho più di 30 visualizzazioni. È davvero doloroso aggiungere tutte queste viste a questa proprietà e mantenerla quando aggiungo o rimuovi viste. che questo è necessario per risolvere il problema? –

1

Questo accade a causa di avvio primavera configura varie ViewResolvers sulla base di ciò che è disponibile nel classpath Se la dipendenza della velocità si trova nel percorso di classe, poi la primavera sarebbe configurare un VelocityViewResolver, ma insieme a ciò configura anche altri risolutori di vista, ContentNegotiatingViewResolver essendo uno di loro.

ContentNegotiatingViewResolver cerca di far corrispondere il nome della vista e il tipo MIME per determinare automaticamente la migliore visualizzazione possibile. In questo processo cerca di trovare XXX.vm.html e quindi lancia l'eccezione.

Per risolvere questo problema, configurare i resolver della vista manualmente. Riferimento: http://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-switch-off-default-mvc-configuration

Ho configurato manualmente viewResolvers introducendo la seguente classe e il problema è scomparso.

@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); 
} 
} 
0

Il motivo @Sujit Kamthe ha detto esattamente corretto. Ho lo stesso errore e l'ho risolto configurando manualmente "ContentNegotiationConfigurer" nella classe WebConfig.

@Configuration 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { 
     configurer.favorPathExtension(false). 
      favorParameter(false). 
      ignoreAcceptHeader(false). 
      useJaf(false). 
      defaultContentType(MediaType.TEXT_HTML). 
      mediaType("json", MediaType.APPLICATION_JSON); 
    } 
} 

Refer:https://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc

Problemi correlati