您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關使用攔截器實現修改返回response,對特定的返回進行修改操作,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
具體思路是:創建攔截器->根據chain獲取response->根據response判斷url是否需要特殊處理的->根據reponse.body().string()獲取json數據并轉換成bean類->修改bean類并創建新的responsebody和response->return修改完畢的response。
public Interceptor getSignInInterceptor(){ Interceptor interceptor = new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); Response response = chain.proceed(request); if(request.url().toString().contains(URL)) { String json =response.body().string(); HttpResult<Object> responseResult = JsonUtil.parseJsonToBean(json,HttpResult.class); if(responseResult.getCode() == 1508) { responseResult.setData(null); String responseJson = JsonUtil.parseObjToJson(responseResult); ResponseBody myBody = ResponseBody.create(MediaType.get("text/plain"), responseJson); return response.newBuilder().body(myBody).build(); } ResponseBody myBody = ResponseBody.create(MediaType.get("text/plain"), json); return response.newBuilder().body(myBody).build(); } return response; } }; return interceptor; }
其中有兩點需要特別注意一下:
1.ResponseBody的創建ResponseBody.create(MediaType.get("text/plain"), json);是用來根據json創建的MediaType.get("text/plain")是設置類型為text。
2.RequestBody調用string方法之后就不能用了,所以調用完了之后即便沒有修改也需要重新去創建ResponseBody和ResPonse,否則會報錯。
補充知識:攔截器中通過response返回JSON數據
做接口的攔截器時,需在攔截器中通過response返回接口是否允許調用的JSON信息:
response.setCharacterEncoding( "UTF-8"); response.setContentType( "application/json; charset=utf-8"); PrintWriter out = null ; try{ JSONObject res = new JSONObject(); res.put( "success", "false"); res.put( "msg", "xxxx"); out = response.getWriter(); out.append(res.toString()); return false; } catch (Excepton e){ e.printStackTrace(); response.sendError( 500); return false; }
看完上述內容,你們對使用攔截器實現修改返回response,對特定的返回進行修改操作有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。