web-dev-qa-db-ja.com

スプリングレストコントローラーがHTMLを返さない

スプリングブート1.5.2を使用していますが、スプリングレストコントローラーは次のようになります

@RestController
@RequestMapping("/")
public class HomeController {

    @RequestMapping(method=RequestMethod.GET)
    public String index() {
        return "index";
    }

}

http:// localhost:8090/assessment / にアクセスすると、コントローラーに到達しますが、src/main/resourcesまたはsrc /の下のmavenプロジェクトにあるindex.htmlを返しません。 main/resources/static。このURL http:// localhost:8090/assessment/index.html にアクセスすると、index.htmlが返されます。私はこのチュートリアルを見ました https://spring.io/guides/gs/serving-web-content/ 彼らはthymeleafを使用しています。ビューを戻すために、スプリングレストコントローラーにthymeleafなどを使用する必要がありますか?

私のアプリケーションクラスは次のようになります

@SpringBootApplication
@ComponentScan(basePackages={"com.pkg.*"})
public class Application {

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

Thymeleaf依存関係をクラスパスに追加すると、このエラー(500応答コード)が表示されます

org.thymeleaf.exceptions.TemplateInputException: Error resolving template "index", template might not exist or might not be accessible by any of the configured Template Resolvers

私はthymeleafが必要なのでしょうか?ここで適切に設定してみます。

このようにindex.htmlを返すようにコントローラーメソッドを変更した後に機能します

@RequestMapping(method=RequestMethod.GET)
public String index() {
    return "index.html";
}

Thymeleafまたはそのようなソフトウェアでは、ファイル拡張子を省略できますが、確かではありません。

9
gary69

あなたの例は次のようになります:

ルート「評価」を使用したコントローラーメソッド

@Controller
public class HomeController {

    @RequestMapping(value = "/assessment", method = RequestMethod.GET)
    public String index() {
        return "index";
    }

}

「src/main/resources/templates/index.html」にあるThymeleafテンプレート

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p>Hello World!</p>
</body>
</html>
7
karelp90

RestControllerアノテーションは、HTMLまたはJSPではなくメソッドからjsonを返します。 @Controllerと@ResponseBodyを1つに組み合わせたものです。 @RestControllerの主な目的は、RESTful Webサービスを作成することです。 htmlまたはjspを返すには、単に@Controllerを使用してコントローラークラスに注釈を付けます。

22
Suresh A

詳細については、このリンクを thymeleaf documentation で見つけてください。

「springcofigrationaddapter」make MvcConfigクラス(これはビューリゾルバを追加する必要があります)およびユーザー@controllerに従ってビューリゾルバを設定しなかった可能性があるため、エラーが発生します
jsonタイプにしたい場合(AnjularJsプロジェクトとして)@RestControllerを使用してください)

0

構成クラスから@EnableWebMvc注釈を削除することでこれを解決しました。

Spring MVC自動構成は、静的index.htmlサポートを提供します。

Spring MVCを完全に制御したい場合は、@Configurationアノテーションが付いた独自の@EnableWebMvcを追加できます。

Spring MVC Auto-configuration から詳細を取得してください。

0
W.Man