需要获取响应消息,同时在 Retrofit 中出现 400 错误,Android
Need to get the response message, while getting 400 error in Retrofit, Android
我收到以下响应,同时出现 400 错误。
{"unit":"You may not create job for other than your unit!"}
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: <-- 400 https://myserver.com/v1/jobs/ (131ms)
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: date: Tue, 08 Jun 2021 11:45:35 GMT
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: content-type: application/json
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: content-length: 59
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: server: nginx/1.18.0 (Ubuntu)
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: vary: Accept, Origin
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: allow: GET, POST, HEAD, OPTIONS
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: x-frame-options: DENY
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: x-content-type-options: nosniff
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: referrer-policy: same-origin
2021-06-08 17:15:33.716 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: {"unit":"You may not create job for other than your unit!"}
2021-06-08 17:15:33.716 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: <-- END HTTP (59-byte body)
我需要向用户显示我在 400 错误响应中得到的信息。响应可能会改变。我尝试了以下
JSONObject msgObj = new JSONObject(String.valueOf(response.raw()));
但是得到如下错误
org.json.JSONException: Value Response of type java.lang.String cannot be converted to JSONObject
编辑:
我尝试了以下方法来获得响应:
Log.e("error body 1>",response.errorBody()+" ");
Log.e("error body 2>",response.body()+" ");
Log.e("error body 3>",response.toString()+" ");
Log.e("error body 4>",response.message()+" ");
Log.e("error body 8>",response.raw()+" ");
得到这个:
error body 1>: okhttp3.ResponseBody$Companion$asResponseBody@d2d0fcc
error body 2>: null
error body 3>: Response{protocol=h2, code=400, message=, url=https://c1.myserver.com/v1/jobs/}
error body 4>:
error body 8>: Response{protocol=h2, code=400, message=, url=https://c1.myserver.com/v1/jobs/}
尝试使用它来将您的响应映射到 API:
提供的错误格式
public static ErrorDTO parseError(Retrofit retrofit, Response<?> response) {
Converter<ResponseBody, ErrorDTO> converter = retrofit.responseBodyConverter(ErrorDTO.class, new Annotation[0]);
ErrorDTO error;
try {
error = converter.convert(response.errorBody());
} catch (IOException e) {
return new ErrorDTO();
}
return error;
}
ErrorDTO 应该是一个简单的 POJO,它与错误响应的主体结构相匹配。
我收到以下响应,同时出现 400 错误。
{"unit":"You may not create job for other than your unit!"}
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: <-- 400 https://myserver.com/v1/jobs/ (131ms)
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: date: Tue, 08 Jun 2021 11:45:35 GMT
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: content-type: application/json
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: content-length: 59
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: server: nginx/1.18.0 (Ubuntu)
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: vary: Accept, Origin
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: allow: GET, POST, HEAD, OPTIONS
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: x-frame-options: DENY
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: x-content-type-options: nosniff
2021-06-08 17:15:33.715 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: referrer-policy: same-origin
2021-06-08 17:15:33.716 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: {"unit":"You may not create job for other than your unit!"}
2021-06-08 17:15:33.716 8599-8752/com.fyxtpmtenant I/okhttp.OkHttpClient: <-- END HTTP (59-byte body)
我需要向用户显示我在 400 错误响应中得到的信息。响应可能会改变。我尝试了以下
JSONObject msgObj = new JSONObject(String.valueOf(response.raw()));
但是得到如下错误
org.json.JSONException: Value Response of type java.lang.String cannot be converted to JSONObject
编辑: 我尝试了以下方法来获得响应:
Log.e("error body 1>",response.errorBody()+" ");
Log.e("error body 2>",response.body()+" ");
Log.e("error body 3>",response.toString()+" ");
Log.e("error body 4>",response.message()+" ");
Log.e("error body 8>",response.raw()+" ");
得到这个:
error body 1>: okhttp3.ResponseBody$Companion$asResponseBody@d2d0fcc
error body 2>: null
error body 3>: Response{protocol=h2, code=400, message=, url=https://c1.myserver.com/v1/jobs/}
error body 4>:
error body 8>: Response{protocol=h2, code=400, message=, url=https://c1.myserver.com/v1/jobs/}
尝试使用它来将您的响应映射到 API:
提供的错误格式public static ErrorDTO parseError(Retrofit retrofit, Response<?> response) {
Converter<ResponseBody, ErrorDTO> converter = retrofit.responseBodyConverter(ErrorDTO.class, new Annotation[0]);
ErrorDTO error;
try {
error = converter.convert(response.errorBody());
} catch (IOException e) {
return new ErrorDTO();
}
return error;
}
ErrorDTO 应该是一个简单的 POJO,它与错误响应的主体结构相匹配。