質問編集履歴

2

誤字修正

2020/05/05 08:59

投稿

daisuke777
daisuke777

スコア0

test CHANGED
File without changes
test CHANGED
@@ -58,7 +58,7 @@
58
58
 
59
59
  member_id,
60
60
 
61
- requestRFID)
61
+ requestMenber)
62
62
 
63
63
  .execute();
64
64
 

1

内容詳細追記

2020/05/05 08:59

投稿

daisuke777
daisuke777

スコア0

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,5 @@
1
+ ## はじめに
2
+
1
3
  retrofitを最近触り始めたのですが、
2
4
 
3
5
  エラーハンドリングがうまくできず…
@@ -6,23 +8,19 @@
6
8
 
7
9
 
8
10
 
9
- 内容
11
+ ## 内容
10
12
 
11
- **①Client側(Android)で正しく「 201」を返すようにしたい**
13
+ ###やりたいこと
12
14
 
13
-  バックンドからのレスポンスとして201テータコードを返しるが、
15
+ **ラーレスポンスが返っきた際も201などと同様に、「null」ではなく、レポンとして返した内容(Object)を埋め込みた**
14
16
 
15
-  Client側(Android)で「200」のステータスが返されてしまう。
17
+ ### 現状
16
18
 
19
+  バックエンドからエラーステータス(今回は「409」)を返しており、
17
20
 
21
+  Client側でもエラーステータスを正しく受けとるが、レスポンスボディに「null」が埋め込まれている(Response.java)。
18
22
 
19
- **②bodyに「null」ではなく、レスポンスとして返した内容(Object)を埋め込みたい**
20
-
21
-  実装通り、バックエンドから「409」のステータスコードを返しており、
22
-
23
-  Client側でも正しく受けとるが、”body”が「null」で表示される。
24
-
25
-  ※rawResponse,errorBody,body)の中の”body”が該当
23
+  ※rawResponse, body, errorBody)の中の”body”が該当
26
24
 
27
25
   ・rawResponseはここでは気にしない
28
26
 
@@ -30,83 +28,41 @@
30
28
 
31
29
 
32
30
 
33
-  
34
-
35
- https://github.com/square/retrofit/blob/master/retrofit/src/main/java/retrofit2/Response.java
31
+ [retrofit2公式Github](https://github.com/square/retrofit/blob/master/retrofit/src/main/java/retrofit2/Response.java):https://github.com/square/retrofit/blob/master/retrofit/src/main/java/retrofit2/Response.java
36
32
 
37
33
 
38
34
 
39
- code】※セキュリティの問題で一部しか持ってこれず申し訳ないです。
35
+ 下記↓今回使用したInterface.java
40
36
 
41
- ```Response.java
37
+ ```Interface.java
42
38
 
43
- public static <T> Response<T> success(@Nullable T body) {
39
+ @POST("/api/family/{family_id}/menber/{member_id})
44
40
 
45
- return success(body, new okhttp3.Response.Builder() //
41
+ Observable<Menber> postMenber(@Header("Authorization") String token,
46
42
 
47
- .code(200)
43
+ @Path(value = "family_id") String FamilyID,
48
44
 
49
- .message("OK")
45
+ @Path(value = "member_id") String MenberID,
50
46
 
51
- .protocol(Protocol.HTTP_1_1)
52
-
53
- .request(new Request.Builder().url("http://localhost/").build())
54
-
55
- .build());
56
-
57
- }
58
-
59
-
60
-
61
- ・・・
62
-
63
-
64
-
65
- public static <T> Response<T> error(int code, ResponseBody body) {
66
-
67
- if (code < 400) throw new IllegalArgumentException("code < 400: " + code);
68
-
69
- return error(body, new okhttp3.Response.Builder() //
70
-
71
- .code(code)
47
+ @Body Member member);
72
-
73
- .message("Response.error()")
74
-
75
- .protocol(Protocol.HTTP_1_1)
76
-
77
- .request(new Request.Builder().url("http://localhost/").build())
78
-
79
- .build());
80
-
81
- }
82
-
83
-
84
-
85
- public static <T> Response<T> error(ResponseBody body, okhttp3.Response rawResponse) {
86
-
87
- checkNotNull(body, "body == null");
88
-
89
- checkNotNull(rawResponse, "rawResponse == null");
90
-
91
- if (rawResponse.isSuccessful()) {
92
-
93
- throw new IllegalArgumentException("rawResponse should not be successful response");
94
-
95
- }
96
-
97
- return new Response<>(rawResponse, null, body);
98
-
99
- }
100
-
101
-
102
-
103
- ・・・
104
48
 
105
49
  ```
106
50
 
51
+ 下記↓上記Interface使用箇所
107
52
 
53
+ ```Activity.java
108
54
 
55
+ Response<Menber> resPostMenber = postMenber(fragment.sessionManager.getJwtToken(),
109
56
 
57
+ family_id,
58
+
59
+ member_id,
60
+
61
+ requestRFID)
62
+
63
+ .execute();
64
+
65
+ ```
110
66
 
111
67
 
112
68
 
@@ -114,11 +70,7 @@
114
70
 
115
71
  なにか対応できる方法がないか探しています。
116
72
 
117
-
118
-
119
- ・successStatusの場合、一律で200を返す
120
-
121
- status >= 400の場合、一律bodyをnullで返す
73
+ - status >= 400の場合、一律bodyをnullで返す
122
74
 
123
75
 
124
76