2016-10-25 1 views
1

Nach der Registrierung eines "generischen" @RequestMapping mein Ressourcenhandler nicht mehr funktioniert.Spring + Thymeleaf Resource-Handler im Konflikt mit RequestMapping

Zuerst habe ich diese Ressource Konfiguration hat, mit Thymeleaf:

@Value("${ty-resource}")  
private String resource; 

@Override 
public void addResourceHandlers(final ResourceHandlerRegistry registry) { 
    super.addResourceHandlers(registry); 
    registry.addResourceHandler("/resources/**").addResourceLocations(resource); 
} 

Meine Ressourcen außerhalb des Projekts sind, so dann (bat er um es) mein Kunde kann es die Ressourcen auf seinen Willen aktualisieren.

Alles war in Ordnung, wurde meine Ressourcen von ${user.dir}/../webapp/resources/

Dann registriert die @RequestMapping(value="/{department}/{category}/{subCategory}") I geliefert beeing.

Dann reagierte meine Ressourcen durch diese Anforderungszuordnung statt vom Resource-Handler.

Ich weiß nicht, was ich tun soll, um dieses Problem zu lösen.

Ich dachte darüber nach:

@Value("${ty-resource}") 
private String resourcesPath; 

@RequestMapping('/resources') 
public ModelAndView resources(@RequestParam("r") String resource) { 
    return new ModelAndView("redirect:"+resourcesPath+resource); 
} 

Aber ich glaube nicht, das ist die beste Antwort sein kann.

Selbst wenn ich dies versuche, da die @RequestMapping(value="/{department}/{category}/{subCategory}") vor der Nummer @RequestMapping('/resources') registriert ist, wird meine Ressource von der @RequestMapping(value="/{department}/{category}/{subCategory}") beantwortet.

- Bearbeiten -

Beispiel:

<script type="text/javascript" data-th-src="@{/resources/js/components.js}"></script>

Diese Ressourcenanforderung wird nicht von der Ressource-Handler reagiert. Die Feder bekommt es als Anpassung für den @RequestMapping(value="/{department}/{category}/{subCategory}")

Antwort

0

Ich löste dies durch die Implementierung der Ordered Schnittstelle in meinen Controllern.

Also habe ich eine größere Reihenfolge auf die Controller eingestellt, die ich als die letzten aufgelöst werden wollte.

0

Ths ist, wie ich Ressourcen bin Laden Thymeleaf mit

@Override 
public void addResourceHandlers(final ResourceHandlerRegistry registry) { 
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
    } 

und mit dem absoluten Pfad in HTML-Ressourcen als

<script th:src="@{/resources/js/validation.js}"></script> 

Do laden Sehen Sie sich How to harness url in Spring MVC? ausgewählte Antwort an. Hoffe, das hilft.

+0

Ich habe die Frage abgeschlossen. – Giovane