spring之RestTemplate

从Spring3.0开始,Spring为创建Rest API提供了良好的支持.

REST提供了一个更简单的可选方案。另外,很多的现代化应用都会有移动或富JavaScript客户端,它们都会使用运行在服务器上REST API。

借助 RestTemplate,Spring应用能够方便地使用REST资源 
Spring的 RestTemplate访问使用了模版方法的设计模式.模版方法将过程中与特定实现相关的部分委托给接口,而这个接口的不同实现定义了接口的不同行为.

get请求

第一、getForEntity方法

 

import org.springframework.web.client.RestTemplate;

import org.springframework.beans.factory.annotation.Value;

@Value("${tw-api-url.wbs}") // 同望wbs数据接口地址
private String twApiUrlWbs;

@Value("${tw-api-url.org-tree}")
private String twOrgTree;

@Value("${tw-api-url.user-pro}")
private String twUserPro;

@Autowired
private RestTemplate rt;



@SuppressWarnings("rawtypes") public List<Map> getTwOrgTree(String orgId) { ResponseEntity<JSONObject> forEntity = rt.getForEntity(twOrgTree + "?orgId={1}", JSONObject.class, orgId); List<Map> orgs = new ArrayList<>(0); if (forEntity.getStatusCodeValue() == 200) { JSONObject bodyData = forEntity.getBody(); if (bodyData.getBooleanValue("success")) { // 响应数据格式转换 String orgStr = bodyData.getJSONObject("data").getString("orgEntity"); orgs = JSONObject.parseArray(orgStr, Map.class); } } else { if (log.isInfoEnabled()) log.info("同望wbs数据获取失败,响应状态非 200!"); } return orgs; }
    public transient ResponseEntity getForEntity(String url, Class responseType, Object uriVariables[])
        throws RestClientException
    {
        RequestCallback requestCallback = acceptHeaderRequestCallback(responseType);
        ResponseExtractor responseExtractor = responseEntityExtractor(responseType);
        return (ResponseEntity)nonNull(execute(url, HttpMethod.GET, requestCallback, responseExtractor, uriVariables));
    }

******* public class ResponseEntity extends HttpEntity

源码最后调用的方法:

 protected Object doExecute(URI url, HttpMethod method, RequestCallback requestCallback, ResponseExtractor responseExtractor)
        throws RestClientException
    {
        ClientHttpResponse response;
        Assert.notNull(url, "URI is required");
        Assert.notNull(method, "HttpMethod is required");
        response = null;
        Object obj;
        try
        {
            ClientHttpRequest request = createRequest(url, method);
            if(requestCallback != null)
                requestCallback.doWithRequest(request);
            response = request.execute();
            handleResponse(url, method, response);
            obj = responseExtractor == null ? null : responseExtractor.extractData(response);
        }
        catch(IOException ex)
        {
            String resource = url.toString();
            String query = url.getRawQuery();
            resource = query == null ? resource : resource.substring(0, resource.indexOf('?'));
            throw new ResourceAccessException((new StringBuilder()).append("I/O error on ").append(method.name()).append(" request for \"").append(resource).append("\": ").append(ex.getMessage()).toString(), ex);
        }
        if(response != null)
            response.close();
        return obj;
        Exception exception;
        exception;
        if(response != null)
            response.close();
        throw exception;
    }

第二种、getForObject

 public transient Object getForObject(String url, Class responseType, Object uriVariables[])
        throws RestClientException
    {
        RequestCallback requestCallback = acceptHeaderRequestCallback(responseType);
        HttpMessageConverterExtractor responseExtractor = new HttpMessageConverterExtractor(responseType, getMessageConverters(), logger);
        return execute(url, HttpMethod.GET, requestCallback, responseExtractor, uriVariables);
    }

post请求

第一种、postForEntity

 public transient ResponseEntity postForEntity(String url, Object request, Class responseType, Object uriVariables[])
        throws RestClientException
    {
        RequestCallback requestCallback = httpEntityCallback(request, responseType);
        ResponseExtractor responseExtractor = responseEntityExtractor(responseType);
        return (ResponseEntity)nonNull(execute(url, HttpMethod.POST, requestCallback, responseExtractor, uriVariables));
    }

第二种、postForObject

   public transient Object postForObject(String url, Object request, Class responseType, Object uriVariables[])
        throws RestClientException
    {
        RequestCallback requestCallback = httpEntityCallback(request, responseType);
        HttpMessageConverterExtractor responseExtractor = new HttpMessageConverterExtractor(responseType, getMessageConverters(), logger);
        return execute(url, HttpMethod.POST, requestCallback, responseExtractor, uriVariables);
    }

第三种、postForLocation

 public transient URI postForLocation(String url, Object request, Object uriVariables[])
        throws RestClientException
    {
        RequestCallback requestCallback = httpEntityCallback(request);
        HttpHeaders headers = (HttpHeaders)execute(url, HttpMethod.POST, requestCallback, headersExtractor(), uriVariables);
        return headers == null ? null : headers.getLocation();
    }

put请求

@RequestMapping("/put")
public void put() {
    Book book = new Book();
    book.setName("红楼梦");
    restTemplate.put("http://HELLO-SERVICE/getbook3/{1}", book, 99);//{1}是占位符。book是要提交的参数。99是替换占位符的值
}

 public transient void put(String url, Object request, Object uriVariables[])
        throws RestClientException
    {
        RequestCallback requestCallback = httpEntityCallback(request);
        execute(url, HttpMethod.PUT, requestCallback, null, uriVariables);
    }

 delete请求

 public transient void delete(String url, Object uriVariables[])
        throws RestClientException
    {
        execute(url, HttpMethod.DELETE, null, null, uriVariables);
    }

关注公众号,我们就从陌生变成了相识,从此我们就成为了朋友,共同学习共同进步!

 

来都来了,抬起贵手点个赞再走呗!

转载于:https://www.cnblogs.com/wwwcf1982603555/p/10098198.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值