springboot 整合httpclient

简单到你可怕

1、同步调用

RestTemplateConfig.java  
  
@Configuration  
public class RestTemplateConfig{  
    @Bean  
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){  
        return new RestTemplate(factory);  
    }  
      
    @Bean  
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){  
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();  
        factory.setReadTimeout(5000);//ms  
        factory.setConnectTimeout(15000);//ms  
        return factory;  
    }  
} 
SpringRestTemplateApp.java  
@RestController  
@EnableAutoConfiguration  
@Import(value = {Conf.class})  
public class SpringRestTemplateApp {  
      
    @Autowired  
    RestTemplate restTemplate;  
      
    /***********HTTP GET method*************/  
    @RequestMapping("")  
    public String hello(){  
        String url = "http://localhost:8080/json";  
        JSONObject json = restTemplate.getForEntity(url, JSONObject.class).getBody();  
        return json.toJSONString();  
    }  
      
    @RequestMapping("/json")  
    public Object genJson(){  
        JSONObject json = new JSONObject();  
        json.put("descp", "this is spring rest template sample");  
        return json;  
    }  
      
    /**********HTTP POST method**************/  
    @RequestMapping("/postApi")  
    public Object iAmPostApi(@RequestBody JSONObject parm){  
        System.out.println(parm.toJSONString());  
        parm.put("result", "hello post");  
        return parm;  
    }  
      
    @RequestMapping("/post")  
    public Object testPost(){  
        String url = "http://localhost:8080/postApi";  
        JSONObject postData = new JSONObject();  
        postData.put("descp", "request for post");  
        JSONObject json = restTemplate.postForEntity(url, postData, JSONObject.class).getBody();  
        return json.toJSONString();  
    }  
      
    public static void main(String[] args) throws Exception {  
        SpringApplication.run(SpringRestTemplateApp.class, args);  
    }  
      
}

2、异步调用

@RequestMapping("/async")  
    public String asyncReq(){  
        String url = "http://localhost:8080/jsonAsync";  
        ListenableFuture<ResponseEntity<JSONObject>> future = asyncRestTemplate.getForEntity(url, JSONObject.class);  
        future.addCallback(new SuccessCallback<ResponseEntity<JSONObject>>() {  
            public void onSuccess(ResponseEntity<JSONObject> result) {  
                System.out.println(result.getBody().toJSONString());  
            }  
        }, new FailureCallback() {  
            public void onFailure(Throwable ex) {  
                System.out.println("onFailure:"+ex);  
            }  
        });  
        return "this is async sample";  
    } 
    @RequestMapping("/headerApi")//模拟远程的restful API  
        public JSONObject withHeader(@RequestBody JSONObject parm, HttpServletRequest req){  
            System.out.println("headerApi====="+parm.toJSONString());  
            Enumeration<String> headers = req.getHeaderNames();  
            JSONObject result = new JSONObject();  
            while(headers.hasMoreElements()){  
                String name = headers.nextElement();  
                System.out.println("["+name+"]="+req.getHeader(name));  
                result.put(name, req.getHeader(name));  
            }  
            result.put("descp", "this is from header");  
            return result;  
        }  
      
        @RequestMapping("/header")  
        public Object postWithHeader(){  
        //该方法通过restTemplate请求远程restfulAPI  
            HttpHeaders headers = new HttpHeaders();  
            headers.set("auth_token", "asdfgh");  
            headers.set("Other-Header", "othervalue");  
            headers.setContentType(MediaType.APPLICATION_JSON);  
              
            JSONObject parm = new JSONObject();  
            parm.put("parm", "1234");  
            HttpEntity<JSONObject> entity = new HttpEntity<JSONObject>(parm, headers);  
            HttpEntity<String> response = restTemplate.exchange(  
                    "http://localhost:8080/headerApi", HttpMethod.POST, entity, String.class);//这里放JSONObject, String 都可以。因为JSONObject返回的时候其实也就是string  
            return response.getBody();  
        }  

猜你喜欢

转载自my.oschina.net/u/3049601/blog/1794598