Spring Boot/Controller/レスポンス/任意のステータスコードを返す

Spring Boot/Controller/レスポンス/任意のステータスコードを返す

Spring Boot の総合的なフロントコントローラーのエラーのレスポンスに関しては Spring Boot/View/Thymeleaf/エラー用テンプレート を参照。

テンプレートを使う場合

任意の Thymeleaf のテンプレートを使いつつ、しかも任意のステータスコードを返したい場合はこのように実装する。 ModelAndView を使う。

@RequestMapping("/hoge")
public ModelAndView hoge(ModelAndView mv) {
    mv.addObject("message", "Hoge World");  // テンプレートに送るパラメータ
    mv.setStatus(HttpStatus.NOT_FOUND);  // ステータスコード
    mv.setViewName("hoge/world");  // 使うテンプレート指定
    return mv;
}

JSON を使う場合

通常JSONをレスポンスする実装は RestController アノテーションを付けたクラスのレスポンスが Jackson によって自動変換されるという形になると思われる。

このステータスコードは当然に 200 になるのだが、これを任意にステータスコードに変えたい。

このようにする

@RequestMapping("/hoge")
public ResponseEntity<Map<String, Object>> hoge() {
    Map<String, Object> map = new HashMap<>();
    map.put("hoge", 12345);
    return new ResponseEntity<Map<String, Object>>(map, HttpStatus.BAD_GATEWAY);
}

ResponseEntity に与える型を今まで Jackson で処理してたやつに変えればいいだけ。

java/spring/spring_boot/controller/response/given_status_code.txt · 最終更新: 2018-12-27 11:27 by ore