2016-06-30 16 views
0

Spring Bootで特定の名前のビューを解決できない場合はどうなりますか?Springブート、Viewの考えられる原因を解決できない問題

以前私は多くのSpringブートアプリケーションを開発しており、これまでにこの問題が発生したことはありません。

/src/main/java 
/src/main/resources/config 
/src/main/resources/static 
/src/main/resources/static/partials 
/src/main/resources/static/resources 

画像::

enter image description here

/src/main/resources/static/resourcesフォルダがresources名前を持つために問題を作っていない

は、私は、次のフォルダ構造を持っています。名前を変更しようとしましたが、問題は解決しませんでした。

私はMavenを使用していますが、私は複数の子プロジェクトを持つ親プロジェクトを持っています。

残りのapiのモジュールには、セキュリティの設定を含む多くの設定クラスが含まれています。

すべてが正常に動作しているため、アプリケーションをエラーなく開始できますが、静的コンテンツを追加しようとしたときにこの問題が発生しました。

次の例(example)から、Springブートは自動的にsrc/main/resources/static/index.htmlをルートパスにマップする必要がありますが、これはアプリケーションでは起こりません。ログからは、春に/のマッピングが見つからなかったことがわかります。

私はこの例を正常に実行することができますが、私のアプリケーションでは動作していません。 春が自動的にマッピングしませんでしたので、私は、ビューを返す必要がありWelcomeController作成:私はマッピングが見つかった、ということでしたが、春にはそれが存在する場合でも名前index.htmlとの見解を解決することができなかったことを報告した後

@Controller 
public class WelcomeRestController { 

    @RequestMapping("/") 
    public String welcome() { 
     return "index.html"; 
    } 
} 

を。

私は、それが推奨されていない場合でもsrc/main/webapp/staticフォルダに静的なコンテンツを追加しようと、それはまた、うまくいきませんでした、同じ問題、ビューを解決することはできません。

私も再び

@Configuration 
public class WebMvcConfiguration extends WebMvcConfigurerAdapter { 

    @Override public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addViewController("/").setViewName("index.html"); 
    } 

} 

を使用して設定しようとした、ビューは解決することはできません。

私のアプリケーションの開始点:

@Import(MyRestServiceConfiguration.class) 
@SpringBootApplication 
public class Application extends SpringBootServletInitializer { 

    public static void main(final String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 

     return builder.sources(Application.class); 
    } 
} 

私は組み込みのTomcatを使用しています。

は、それがセキュリティ設定やWebMvcConfigurerAdapterを除く他の構成は、ビューに影響があることは可能ですか?

私は時間のために、この問題を解決しようとしていますが、私はsoulutionを見つけることができません。どんな助けもありがとう。

EDIT:

Mavenのが問題になることはありませんので、私は、ちょうどJavaアプリケーションとしてApplication.javaを実行し、Mavenを使用してアプリケーションを構築しておりません。

EDIT:index.htmlをの 内容:

<!DOCTYPE html> 
<html > 
    <head lang="en"> 

    </head> 
    <body> 

     <div>Hello</div> 
    </body> 
</html> 
+0

@ArnaudDenoyelle Mavenメニューでは、依存関係の追加、プラグインの追加などしかありません。 –

+1

静的なものは、ハンドラ/ビュー処理なしで直接消費するものです。ビュー名を返すハンドラメソッド(例えば 'welcome()')がある場合、ビューリゾルバは 'static'からではなく、それを処理しなければなりません。どんなビューテクノロジーを使用する予定ですか?タイメレフ?フリーマーカ? JSP?例えば。 Thymeleafは、デフォルトで 'static'フォルダではなく' template'フォルダからビューファイルを読み込みます。 – Andreas

+0

@Andreasそれは単なるHTMLです。 index.htmlのコンテンツを含めるように質問を編集しました。 –

答えて

1

私は解決策を見つけたが、私はこれが問題になる理由は本当にわかりません。なぜ起こっているのか分かっているなら、あなたの答えを投稿してください。

問題は、それを除去した後MyRestServiceConfiguration

@Configuration 
// @EnableWebMvc 
@Import(MyServiceConfiguration.class) 
    public class MyRestServiceConfiguration { 

} 

@EnableWebMvc注釈だった、すべてはそれが必要として動作します。春ブートガイドから

通常は、Spring MVCのアプリの@EnableWebMvcを追加しますが、それはクラスパス上に、ばねwebmvcを見たときに春ブーツが自動的に追加されます。これにより、アプリケーションにWebアプリケーションとしてフラグが立てられ、DispatcherServletの設定などの主要な動作がアクティブ化されます。

@EnableWebMvcアノテーションは必要ありませんが、なぜ問題になるのですか?

EDIT:

春ブート参照から:MVCの設定を完全に制御を取るために

最も簡単な方法は、@EnableWebMvc注釈を使用して独自の@Configurationを提供することです。これにより、すべてのMVC設定が手元に残ります。 Springの@EnableWebMvcドキュメントから

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackageClasses = { MyConfiguration.class }) 
public class MyWebConfiguration { 

} 

ので、問題は@EnableWebMvc注釈がdissabledということでした。

@Configurationクラスにこの注釈を追加するには、例えば、WebMvcConfigurationSupportからSpring MVCの設定をインポートデフォルトのSpring Bootの設定であり、そのためSpringは静的リソースを探す場所を知らなかったからです。私が何か間違っていたら、私を修正してください。

関連する問題