teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

修正

2019/12/20 17:16

投稿

rubytomato
rubytomato

スコア1752

answer CHANGED
@@ -1,3 +1,5 @@
1
+ > 調べたらステータスコードで処理の成否を判定するのが一般的とあったのですがどうすれば200以外のステータスコードが返せるでしょうか?
2
+
1
3
  たとえば、HTTPステータス 500を返したい場合は
2
4
 
3
5
  ```Java
@@ -15,4 +17,33 @@
15
17
 
16
18
  こちらの記事も分かりやすく解説されています。
17
19
 
18
- [Spring Boot のデフォルトエラーメッセージを制御したい](https://qiita.com/leonis_sk/items/c954face2c5c1cbf3802)
20
+ [Spring Boot のデフォルトエラーメッセージを制御したい](https://qiita.com/leonis_sk/items/c954face2c5c1cbf3802)
21
+
22
+ > また、こういう場合にどんなステータスコードを返すべきなのかも教えていただけるとありがたいです。
23
+
24
+ エラーの原因がサーバー側にある場合、Statusコードは5xx番台を使うことが一般的だと思いますが、この質問の例(ファイルの書き込み先が存在しない、書き込み権限が無い等の理由で失敗した)で言えば、HTTP Statusコード 500 (Internal Server Error)を返すのが適切だと思います。
25
+
26
+ また、Rest APIではHTTP Statusコードの他に、クライアント側へ詳細なエラー情報を伝えるために、アプリケーションの仕様として決めたエラーレスポンスを返すこともあります。
27
+
28
+ 下記は一例になりますが、`ResponseEntity<ResponseMessage>`のインスタンスを返すと
29
+
30
+ ```Java
31
+ @Data
32
+ @Builder
33
+ class ResponseMessage {
34
+ private String code;
35
+ private String message;
36
+ }
37
+ ```
38
+
39
+ ```Java
40
+ return new ResponseEntity<ResponseMessage>(
41
+ ResponseMessage.builder().code("メッセージコード").message("メッセージ詳細").build(),
42
+ HttpStatus.INTERNAL_SERVER_ERROR);
43
+ ```
44
+
45
+ クライアントにこのようなJSONがHTTP Status 500で返ります。
46
+
47
+ ```json
48
+ {"code":"エラーコード","message":"メッセージ詳細"}
49
+ ```