天天看点

通过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");
                        }
                    });