2016-06-18 3 views
0

Lassen Sie uns meine Website-Namen sagen: foo.comFrühling RequestMapping mit Root-Pfad (/ {} benutzerdefinierte)

Wenn ein Benutzer foo.com, ich index.html zeigen wollen.

Wenn ein Benutzer foo.com/something eintippt, möchte ich, dass der Server die Anforderung am Controller abfängt.

Hier ist, was ich in der Homecontroller tat

@Controller 
public class HomeController { 
    @RequestMapping(value={"/"}, method=RequestMethod.GET) 
    public String getHome() { 
     return "index.html"; 
    } 
} 

Und sollte die CustomController die Anfrage jedoch

@Controller 
public class CustomController { 
    @RequestMapping(value={"/{custom}"}, method=RequestMethod.GET) 
    public String getCustom(@PathVariable String custom) { 
     // Do something here.. 
    } 
} 

fangen, wirft er einen Fehler: Kreisbahn Ansicht [index.html ]: würde erneut zur aktuellen Handler-URL [/index.html] zurückkehren. Das liegt daran, dass der CustomController die GET-Anforderung abfängt: foo.com/index.html, nachdem der HomeController die Zeichenfolge: index.html zurückgegeben hat.

habe ich einige der Forschung wie folgt aus:

public class WebMvcConfiguration extends WebMvcConfigurerAdapter { 
    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.setOrder(Ordered.HIGHEST_PRECEDENCE); 
     registry.addResourceHandler("/assets/**").addResourceLocations("classpath:/assets"); // My asset 
     registry.addResourceHandler("index.html").addResourceLocations("file:/index.html"); 
    } // It's not working 

    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addViewController("/").setViewName("forward:/" + FileNames.INDEX); 
    } // This also not working 
} 

Und die Anmerkung von @Controller Wechsel in der CustomController @RestController ist keine Option.

Ich habe auch keine JSP-Dateien im Projekt - sie sind einfach * .html-Dateien.

My project setup

I Frühling 1.3.3 Release verwenden, so helfen Sie mir.

Antwort

0

Diese Lösung funktioniert mit UI-Router (AngularJS-Bibliothek). Außerdem haben Sie $ resourceProvider Einstellung ändern:

// In your app module config 
$resourceProvider.defaults.stripTrailingSlashes = false; 

Dann, im Frühling Server-Codes, können Sie dies tun:

@RequestMapping(value = "/{custom:[^\\.]*}") 
public String redirect(@PathVariable String custom) { 
    // Do something here... 
    return "forward:/"; 
} 

Fand die Lösung unter diesem Link: https://spring.io/blog/2015/05/13/modularizing-the-client-angular-js-and-spring-security-part-vii

Verwandte Themen