web-dev-qa-db-ja.com

春のブートで安らかなコントローラからhtmlページを返す方法は?

コントローラからシンプルなhtmlページを返したいのですが、ファイルの名前だけを取得し、コンテンツは取得しません。どうして?

これは私のコントローラーコードです:

@RestController
public class HomeController {

    @RequestMapping("/")
    public String welcome() {
        return "login";
    }
}

これは私のプロジェクト構造です:

[enter image description here

13
Gustavo

@RestControllerを次のように使用する場合:

@RestController
public class HomeController {

    @RequestMapping("/")
    public String welcome() {
        return "login";
    }
}

これは、通常のコントローラーでこれを行うのと同じです。

@Controller
public class HomeController {

    @RequestMapping("/")
    @ResponseBody
    public String welcome() {
        return "login";
    }
}

@ResponseBodyを使用すると、return "login";がStringオブジェクトとして返されます。返されるオブジェクトはすべて、HTTP本体にpayloadとしてJSONとして添付されます。

これが、応答でloginだけを取得している理由です。

22
kukkuz

ModelAndViewを使用して試すことができます:

@RequestMapping("/")
public ModelAndView index () {
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("index");
    return modelAndView;
}
7
Happy Nguyen

以下の手順に従ってください

  1. Htmlファイルをresources/templates /に配置する必要があります
  2. @RestControllerを@Controllerに置き換えます
  3. ビューリゾルバーを使用している場合は削除します。
  4. コントローラーメソッドは、retunrn "index"のような拡張子のないビューのファイル名を返す必要があります
  5. 以下の依存関係を含めます。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>`
    
5
Chandan Kumar

Kukkuzからの回答は、この依存関係をpomファイルに追加するまでは機能しませんでした。

<!-- Spring boot Thymeleaf -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

ガイドから こちら

here で概説されているレジストリリソースを更新します。

その後、正常に動作し始めました。将来、誰かが同じ問題に遭遇し、最初の回答を追っても問題が解決しない場合は、@ Kukkuzの回答のコードを利用した後、次の2つの手順に従ってください。

5
Silmarilos

login.htmlを使用する必要があります。 RestControllerControllerに置き換えます

3

置換@RestController with @Controller

2
Noshin

置換@Restcontroller with @controller@Restcontrollerは、htmlおよびjspページではなくコンテンツのみを返します。

2
Bad Developer

私はThymeleafを使用していませんが、それが私のために働いた唯一の方法は@Controllerクラス内および

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

ここで返すString

 return "login";

実際には、コンテンツ全体がブラウザに送り返します。

ファイルの内容を送り返す場合、1つの方法は次のとおりです。

  1. ファイルを開く
  2. 内容を文字列に読み込む
  3. 値を返す

あなたはこれで行くことができます 質問Springブートサービスでファイルをダウンロードするための答え

0
ppeterka

最も正確で最新の形式は、thymeleafIoCのような、Modelを使用してエンドポイントメソッドに依存関係を設定することです。インスタンス...

 @Controller 
 public class GreetingController {
        @GetMapping("/greeting") 
        public String greeting(
            @RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
             model.addAttribute("name", name); 
             return "greeting"; 
             // returns the already proccessed model from src/main/resources/templates/greeting.html 
      }
 }

完全な例を参照してください: https://spring.io/guides/gs/serving-web-content/

名前return "login";のみを返すため、名前のみを取得します。 @RestControllerであり、このコントローラーはビューではなくデータを返します。このため、メソッドから返すコンテンツのみを取得します。

この名前でビューを表示する場合は、Spring MVCを使用する必要があります この例を参照

0