2016-09-08 9 views
1

すべてのhtmlページを準備してプロジェクトを開始しています。ですから、今はすべてのコントローラを作成してリクエストを処理し、ビューを表示する必要があります。すべてのコントローラを作成する前に、ルートに対応するビューを取得する「汎用」コントローラを用意することはできますか?Spring MVCがマップされていないリクエストを処理する

たとえば、私はspring mvc + thymeleafを持っています。だから

@RequestMapping(value = "/", method = RequestMethod.GET) 
public String login(Model model) { 
    return "authentication/login.html"; 
} 

私は「ジェネリックを持つことができます:私が作成した最初で唯一のコントローラである

private ITemplateResolver templateResolver() { 
    SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); 
    resolver.setApplicationContext(applicationContext); 
    resolver.setPrefix("/WEB-INF/templates/"); 
    resolver.setTemplateMode(TemplateMode.HTML); 
    return resolver; 
} 

:私は、リゾルバとのWebContent/WEB-INF /テンプレートですべての私の.htmlを持っています'コントローラは、残りの要求を処理するので、' http://localhost:8080/authentication/register.html 'と書くと、ジェネリックコントローラは' authentication/register.html 'のビューを取得します。

+0

あなたは[this](http://forum.spring.io/forum/spring-projects/web/19404-how-to-map-urls-to-jsps-without-the-custom-コントローラ) – AntJavaDev

+0

@AntJavaDev 'UrlFilenameViewController'を拡張し、' postProcessViewName'をオーバーライドしています。 Springはクラスを無視します。 – angeldev

答えて

2

テンプレートが静的な場合は、それらをリソースとして提供できます。 spring documentation on that topicを読んでください。

基本的には、プロジェクト内のSpring構成のタイプに応じ

<mvc:resources mapping="/**" location="/WEB-INF/templates/"/> 

または

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/**").addResourceLocations("/WEB-INF/templates/"); 
    } 

} 

ようになります。

+0

私は動的なHTMLを必要とするかどうか?私はThymeleafを使用しています。 Althougはこのソリューションをうまく利用しています。私は動的コンテンツ用にコントローラを作成する予定です。 – angeldev

関連する問題