使用RestTemplate实现rest服务的调用

添加maven依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

创建rest工具类继承RestTemplate

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import com.alibaba.fastjson.JSONObject;

/**
 * Desc:
 * Author: 李阳
 * mobile: 15002992382
 * emailly_triangle@126.com
 * Date: 2017/8/23 16:01
 */
@Component
public class ClientUtil extends RestTemplate {

    public JSONObject callGetMethod(String requestUrl) {
        HttpEntity entity = new HttpEntity(new HttpHeaders());
        ResponseEntity<String> result = this.exchange(requestUrl, HttpMethod.GET, entity, String.class);

        return JSONObject.parseObject(result.getBody());
    }

    public JSONObject callPostMethod(String requestUrl, String jsonBody) {
        HttpHeaders header = new HttpHeaders();
        header.set("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8");
        HttpEntity entity = new HttpEntity(jsonBody, header);
        ResponseEntity<String> result = this.exchange(requestUrl, HttpMethod.POST, entity, String.class);

        return JSONObject.parseObject(result.getBody());
    }

    public JSONObject callPutMethod(String requestUrl, String jsonBody) {
        HttpHeaders header = new HttpHeaders();
        header.set("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8");
        HttpEntity entity = new HttpEntity(jsonBody, header);
        ResponseEntity<String> result = this.exchange(requestUrl, HttpMethod.PUT, entity, String.class);

        return JSONObject.parseObject(result.getBody());
    }

    public JSONObject callDeleteMethod(String requestUrl) {
        HttpHeaders header = new HttpHeaders();
        HttpEntity entity = new HttpEntity(header);
        ResponseEntity<String> result = this.exchange(requestUrl, HttpMethod.DELETE, entity, String.class);

        return JSONObject.parseObject(result.getBody());
    }

调用服务:

import com.alibaba.fastjson.JSONObject;
import com.utils.ClientUtil;
import com.utils.HttpEntityUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;

/**
 * Author: 李阳
 * Date: 16/08/2017 8:54 PM
 * Desc: Rest服务调用
 */
@Service
public class RestServiceInvoking {

    @Autowired
    private ClientUtil clientUtil;

    public JSONObject loadSth(Long id) {
        String requestUrl = tmisServiceUrl + "/sth/" + id;
        ResponseEntity<String> result = clientUtil.callGetMethod(requestUrl);
        return JSONObject.parseObject(result.getBody());
    }

    public JSONObject addSth(String view) {
        String requestUrl = tmisServiceUrl + "/sth";
        ResponseEntity<String> result =  clientUtil.callPostMethod(requestUrl,view); 

        return JSONObject.parseObject(result.getBody());
    }

    public JSONObject updateSth(String view) {
        String requestUrl = tmisServiceUrl + "/sth";
        ResponseEntity<String> result =  clientUtil.callPutMethod(requestUrl,view); 

        return JSONObject.parseObject(result.getBody());
    }

    public JSONObject deleteSth(Long id) {
        String requestUrl = tmisServiceUrl + "/sth/" + id;
        ResponseEntity<String> result =  clientUtil.callDeleteMethod(requestUrl); 

        return JSONObject.parseObject(result.getBody());
    }
}
    

被调用服务接收参数都是以json格式接受的,如:

@RequestMapping(value ="/sth" method = RequestMethod.POST)
@ResponseBody
public ResponseEntityBody saveInfo(@RequestBody view view) {……}

如果被调用服务以表单形式接受入参,如(无@RequestBody,表示表单形式接受参数):

@RequestMapping(value = "/sth", method = RequestMethod.POST)
@ResponseBody
public ResponseEntityBody saveInfo(view view) {……}

则RestTemplate使用方式变成如下形式:

public JSONObject callPostMethodByForm(String requestUrl, Map<String, String> parameters) {
    HttpHeaders headers = new HttpHeaders();
    headers.set("Content-Type", MediaType.APPLICATION_FORM_URLENCODED + ";charset=UTF-8");
    MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
    if (null != parameters && !parameters.isEmpty()) {
        for (Map.Entry<String, String> entry : parameters.entrySet()) {
            params.add(entry.getKey(), entry.getValue());
        }
    }
    params.add("sign", "123456");
    params.add("timestamp", "12345600000");
    HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(params, headers);
    ResponseEntity<String> response = this.exchange(requestUrl, HttpMethod.POST, requestEntity, String.class);

    return JSONObject.parseObject(response.getBody());
}

转载于:https://my.oschina.net/kevin2kelly/blog/1523669

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值