天天看點

通過AsyncRestTemplate帶參數異步請求,親測成功

示例代碼段,

AsyncRestTemplate通路别人背景方法,盡量使用異步,不影響自己項目中請求。如有需要,可使用RestTemplate。以下是通過AsyncRestTemplate帶參數異步請求的個人總結方法。

//以下代碼中的paramsMap是一個參數,可以根據自己情況換成對應的String資料類型等等
AsyncRestTemplate template = new AsyncRestTemplate();

                    String url="http://168.211.1.93:18099/replaceInfo";
                    
                    //此處不能用HashMap或者list,map等。否則傳參不成功,盡量使用(或者很有可能是必須使用)MultiValueMap這個類型
                    MultiValueMap<String, Object> memberMap = new LinkedMultiValueMap<String, Object>();
                    
                    //對應的MultiValueMap方法,不再使用put,而是add了。
                    memberMap.add("number",paramsMap.get("number"));
                    memberMap.add("name",paramsMap.get("name"));
                    
                    //AsyncRestTemplate 對象的postForEntity方法需要有一個參數對象,是HttpEntity類型的,是以對參數進行封裝到一個httpEntity對象中。
                    //HttpHeaders 是HttpEntity的一個必須參數。
                    HttpHeaders headers = new HttpHeaders();
                    HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(memberMap,headers);
                    
                    //開始通路。
                    ListenableFuture<ResponseEntity<Object>> obj = template.postForEntity(url,httpEntity,Object.class);

					//通路成功與否的回調
                    obj.addCallback(new ListenableFutureCallback<ResponseEntity<Object>>(){

						//成功回調
                        @Override
                        public void onSuccess(ResponseEntity<Object> result) {
                            Map<String, Object> rutMap = new HashMap<>();

							//result.getBody();是成功回調的内容。
							//檢視成功回調的具體内容
                            System.out.println(result.getBody());
                            
                            //是自己的部分,根據自己需求更改
                            rutMap.put("name",((Map)((Map) result.getBody()).get("data")).get("name"));
                            rutMap.put("number",paramsMap.get("number"));
                            userSercie.updateMemberInfo(rutMap);
                        }

						//成功回調
                        @Override
                        public void onFailure(Throwable ex) {
                            LOG.info("ERROR");
                        }
                    });