エンジニア男

勉強したことの忘備録としてつらつら書いていきます。

SpringBoot で日本語を含むURLにリダイレクトすると、日本語が文字化けしてしまう場合の処理

・業務で日本語を含むURLにリダイレクトすると、日本語が文字化けしてしまうエラーの対応をしたので、その際のメモ。

 

参考にさせて頂いたサイト

https://mike-neck.hatenadiary.com/entry/2018/01/04/073000

 

http://terasolunaorg.github.io/guideline/5.1.0.RELEASE/ja/ImplementationAtEachLayer/ApplicationLayer.html#controller-method-argument-redirectattributes-param-label

 

https://weblabo.oscasierra.net/java-urlencode/

 

 

以下のようなメソッドの場合、nameにアルファベットのみの値が入れば問題ないが、日本語が含まれる場合文字化けして404エラーとなる。

@PostMapping("/detail/{name}/create")
public String create(Model model,
RedirectAttributes redirectAttrs,
@PathVariable("name") String name,) {
return "redirect:/detail/" + name;
}

 

 

日本語が含まれるようなパラメータがある場合は、以下のように修正。

@PostMapping("/detail/{name}/create")
public String create(Model model,
RedirectAttributes redirectAttrs,
@PathVariable("name") String name,) {
redirectAttrs.addAttribute("name", name);
return "redirect:/detail/{name}";
}

 

日本語が文字化けしてしまうのは、URLエンコーディングされていないため。

RedirectAttributes#addAttributeメソッドを使用するとURLエンコーディングが行われるため、動的にURLに値を埋め込む際は直接記述はせずに必ずRedirectAttributes#addAttributeメソッドを使用する。