springboot-24-restTemplate的使用
生活随笔
收集整理的這篇文章主要介紹了
springboot-24-restTemplate的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
項目中使用的是HttpClient, 后來改成springboot, 偶然間發現restTemplate
原博客:?http://blog.csdn.net/u013895412/article/details/53096855
{ "Author": "tomcat and jerry", "url":"http://www.cnblogs.com/tomcatandjerry/p/5899722.html" }核心代碼:?
String url = "http://localhost:8080/json"; JSONObject json = restTemplate.getForEntity(url, JSONObject.class).getBody();?
實用:?
restConfig.java
package com.iwhere.scrapy.rest;import java.nio.charset.Charset; import java.util.Iterator; import java.util.List;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.web.client.RestOperations; import org.springframework.web.client.RestTemplate;/*** 定義restTemplate的配置* * @author wenbronk* @Date 下午4:33:35*/ @Configuration public class RestTemplateConfig {@Bean@ConditionalOnMissingBean({ RestOperations.class, RestTemplate.class })public RestTemplate restTemplate(ClientHttpRequestFactory factory) {// return new RestTemplate(factory); RestTemplate restTemplate = new RestTemplate(factory);// 使用 utf-8 編碼集的 conver 替換默認的 conver(默認的 string conver 的編碼集為"ISO-8859-1")List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();Iterator<HttpMessageConverter<?>> iterator = messageConverters.iterator();while (iterator.hasNext()) {HttpMessageConverter<?> converter = iterator.next();if (converter instanceof StringHttpMessageConverter) {iterator.remove();}}messageConverters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));return restTemplate;}@Bean@ConditionalOnMissingBean({ClientHttpRequestFactory.class})public ClientHttpRequestFactory simpleClientHttpRequestFactory() {SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();factory.setReadTimeout(15000);// msfactory.setConnectTimeout(15000);// msreturn 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";自定義header
@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(); }?
總結
以上是生活随笔為你收集整理的springboot-24-restTemplate的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么开发人员从Java转到Go
- 下一篇: ipsec协议(转)