【Java で Webアプリ開発入門】コントローラーからビューにHTMLを渡す(Thymeleaf)

何の記事??

Spring Boot のテンプレートエンジン Thymeleaf でコントローラーからビューに HTML を渡す方法です。


本題

先述の通りコントローラーから HTML を渡したくて以下のようなコントローラーを書きました。

public ModelAndView index(ModelAndView mav){
  mav.setViewName("index");
  mav.addObject("msg","<h1>dummyyyy</h1><hr />");
  return mav;
}

Thymeleaf には

<p th:text="${msg}">message</p>

と書きました。しかし、表示には HTML がエスケープされていて HTML コードがそのまま出力されてしまいました。

解決策は、 th:utext を使用するだけ!!

Thyeleaf 側で th:text 部分を変えるだけでできました(笑)

<p th:utext="${msg}">message</p>

これでブラウザに HTML が解析された結果が表示されます。


最後に

きちんと調べれば早く済んだのに。。。無駄に試行錯誤重ねていました(笑)

しかし、th:utext は「値に HTML タグが含まれると、それがそのまま機能する」ためユーザから送信された情報をもとにテキストを作成する場合、XSS などの攻撃の対策が必要ですね。実務ではどのように使っているんだろう・・・??