spring.io から次のドキュメントを読み、By default Spring Boot will serve static content from a directory called /static (or /public or /resources or /META-INF/resources) in the classpath
と表示しましたが、index.htmlファイルを/resources
文字列index
がレンダリングされます。現在 index.html
はwebappの下にあり、AngularJSを使用しています。
MvcConfiguration
@Configuration
public class MvcConfig {
@Bean
InternalResourceViewResolver viewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/webapp/");
resolver.setSuffix(".html");
return resolver;
}
}
インデックスページのRESTfulサービス
@RestController
public class IndexController {
@RequestMapping("/")
public String index(){
System.out.println("Looking in the index controller.........");
return "index";
}
}
私のIDEコンソールが見えるLooking in the index controller......
IndexControllerから印刷され、Chrome開発ツールのネットワークの下でのみ表示されますlocalhost 200
。
index.html
<body>
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->
<div ng-view></div>
<div>Angular seed app: v<span app-version></span></div>
Spring Boot docs も言う:
アプリケーションがjarとしてパッケージ化される場合は、src/main/webappディレクトリを使用しないでください。このディレクトリは一般的な標準ですが、warパッケージでのみ機能し、jarを生成する場合、ほとんどのビルドツールでこのディレクトリは黙って無視されます。
Spring Bootは非常に独断的であり、デフォルトに抵抗しようとしない場合に最適に機能します。 /src/main/webapp
にファイルを配置する理由は何もありません。フロントエンドアセットには/src/main/resources/static
を使用してください。それが最も一般的な場所です。
ルートレベルController
を作成する必要なく、ルートURIからこれらの静的ファイルを自動的に提供します。実際、IndexController
を使用すると、静的フロントエンドファイルがルートURIから提供されなくなります。静的ファイル用にController
を作成する必要はまったくありません。
また、ビューリゾルバーはアプリには必要ありません。アプリは単なるREST APIが単一ページで使用されるangularアプリケーションです。したがって、HTMLテンプレートはクライアント上にあります。サーバー側のHTMLを実行している場合は、ビューリゾルバーが必要です。テンプレート化(ThymeleafやJSPなど)するため、その部分も削除します。
@RestController
public class IndexController {
@RequestMapping("/")
public String index(){
System.out.println("Looking in the index controller.........");
return "index";
}
}
問題はここにあり、@ RestControllerを使用しているため、この場合、「return 'index';」と書くと、春のブーツはそれをただの答えとしてカバーしています。代わりに@Controllerアノテーションを使用する必要があります。