前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot-1-restTemplate的使用

springboot-1-restTemplate的使用

作者头像
用户5640963
发布2019-07-26 14:05:35
1K0
发布2019-07-26 14:05:35
举报
文章被收录于专栏:卯金刀GG卯金刀GG

原博客: http://blog.csdn.net/u013895412/article/details/53096855

代码语言:javascript
复制
{  
  "Author": "tomcat and jerry",  
  "url":"http://www.cnblogs.com/tomcatandjerry/p/5899722.html"      
}

核心代码:

代码语言:javascript
复制
String url = "http://localhost:8080/json";  
JSONObject json = restTemplate.getForEntity(url, JSONObject.class).getBody();
代码语言:javascript
复制
@Value("${Crawler_port.crawlerTotle}")
private String crawlerTotle;//地址配置在xml文件里
代码语言:javascript
复制
String pingtaitongji = restTemplate.getForObject(crawlerTotle,String.class);

实用:

restConfig.java

代码语言:javascript
复制
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);// ms
        factory.setConnectTimeout(15000);// ms
        return factory;
    }
}

请求测试:

代码语言:javascript
复制
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);  
    }  
      
}

也可以异步调用

代码语言:javascript
复制
@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

代码语言:javascript
复制
@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();  
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实用:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档