簡單到你可怕java
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); } }
@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(); }