简单记录一下使用RestTemplate调用接口

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.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

	
	@Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        return new RestTemplate(factory);
    }
 
    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(10000);//单位为ms
        factory.setConnectTimeout(10000);//单位为ms
        return factory;
    }
}

接下来我要调用127.0.0.1:8081里面的内容

Get方法操作:
第一种、首先get调用不附带参数

//要被调用的方法
@GetMapping("/rest/get1")
	@ResponseBody
	public String getResult(){
		return "SUCCESS";
	}
	/**
	 * 调用者
	 * @return
	 */
	@ResponseBody
	@RequestMapping(params = "getMsgTest1")
	public Result restTemplate() {
		try {
			String url="http://127.0.0.1:8081/rest/get1";
			ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
			//获取3方接口返回的数据通过entity.getBody();它返回的是一个字符串;
			System.err.println(forEntity);
			return Result.ok(forEntity);
		} catch (Exception e) {
			return Result.fail(e.getMessage());
		}
	}

返回结果如下
在这里插入图片描述
第二种、get调用附带参数

//被调用者
@GetMapping("/rest/get2")
	@ResponseBody
	public String getResult1(String name){
		return "SUCCESS"+name;
	}

	/**
	 *调用者,请求后面加参数
	 * @return
	 */
	@ResponseBody
	@RequestMapping(params = "getMsgTest2")
	public Result restTemplate2() {
		try {
			String url="http://127.0.0.1:8081/rest/get2?name=sbbb";
			ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
			System.err.println(forEntity);
			return Result.ok(forEntity);
		} catch (Exception e) {
			return Result.fail(e.getMessage());
		}
	}
	

返回结果如下
在这里插入图片描述
第三种,get请求,URL后面多个参数

//被调用者
	@GetMapping("/rest/get3")
	@ResponseBody
	public String getResult3(SysMenuEntity menu){
		return "SUCCESS"+menu.toString();
	}
	//注意这里接收参数可以用字段来接收,也可以用对象来接收,但是不能加@RequestBody注解
	@ResponseBody
	@RequestMapping(params = "getMsgTest3")
	public Result restTemplate3() {
		try {
			String url="http://127.0.0.1:8081/rest/get3?name=测试&type=1";
			ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
			System.err.println(forEntity);
			return Result.ok(forEntity);
		} catch (Exception e) {
			return Result.fail(e.getMessage());
		}
	}

get在后面添加多个参数比较麻烦的时候,直接用map

//被调用者,用字段或者实体类都可以接收,记得不要加@RequestBody注解
@RequestMapping("/getParams")
	public Result getTest(SysMenuEntity menu) {
		return Result.ok(menu.toString());
	}
	//调用者
@ResponseBody
	@RequestMapping(params="getTest")
	public Result getTest() {
		String url="http://127.0.0.1:8081/getParams?name={name}&id={id}";
		ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class,"test",5);
		System.err.println(forEntity.toString());
		return Result.ok(forEntity);
	}
	//或者
	@ResponseBody
	@RequestMapping(params="getTest")
	public Result getTest() {
		Map<String,Object> map = new HashMap<>();
		map.put("name", "test");
		map.put("id", 5);
		String url="http://127.0.0.1:8081/getParams?name={name}&id={id}";
		ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class,map);
		System.err.println(forEntity.toString());
		return Result.ok(forEntity);
	}

总结,get调用方式都差不多

POST方法操作

//被调用者  注意这里要加上@RequestBody注解来接收
@PostMapping("/rest/get4")
	@ResponseBody
	public String getResult4(@RequestBody SysMenuEntity menu){
		return "SUCCESS"+menu.toString();
	}
	
	//调用者
	@ResponseBody
	@RequestMapping(params = "getMsgTest4")
	public Result restTemplate4() {
		try {
			String url="http://127.0.0.1:8081/rest/get4";
			HttpHeaders headers = new HttpHeaders();
			MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
		    headers.setContentType(type);
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("id", "1");
			map.put("name", "文件原名称");
			HttpEntity<Map<String, Object>> request = new HttpEntity<Map<String, Object>>(map, headers);
			ResponseEntity<String> entity = restTemplate.postForEntity(url, request, String.class);
			System.err.println(entity);
			return Result.ok(entity);
		} catch (Exception e) {
			return Result.fail(e.getMessage());
		}
	}

返回结果如下
在这里插入图片描述

说一下restTemplate.postForEntity 和restTemplate.postForObject的区别
前者就像上图一下获取信息较为详细,而后者则是获取上面信息里面的body
实操代码

//统一封装请求
public  Result getResult(String url,Map<String,Object> map) {
	try {
		HttpHeaders headers = new HttpHeaders();
		//定义请求参数类型,这里用json所以是MediaType.APPLICATION_JSON
		//headers.setContentType(MediaType.APPLICATION_JSON);
		MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
	    headers.setContentType(type);
		//RestTemplate带参传的时候要用HttpEntity<?>对象传递
		HttpEntity<Map<String, Object>> request = new HttpEntity<Map<String, Object>>(map, headers);
		ResponseEntity<String> entity = restTemplate.postForEntity(url, request, String.class);
		//获取3方接口返回的数据通过entity.getBody();它返回的是一个字符串;
		String body = entity.getBody();
		JSONObject json = JSONObject.parseObject(new String(body));
		return Result.ok(json);
	} catch (Exception e) {
		return Result.fail(e.getMessage());
	}
}

实际调用

/**
 *注意点:参数类型必须对应,不然提示缺少参数
 * 控制密集架点击区的时候获取温度湿度
 * @param request
 * @return
 */
@ResponseBody
@RequestMapping(params="ReportStatus")
public Result ReportStatus(HttpServletRequest request) {
	String id = request.getParameter("id");
	Map<String, Object> dbData = commonService.findOneForJdbc(" select * from warehousesettingtree where id = ?",id);
	int QuNo = Integer.parseInt(dbData.get("area_code").toString());
	String serverIp=dbData.get("server_num").toString();
	String port = dbData.get("http_port").toString();
	String StoreCode = dbData.get("warehousecode").toString();
	String url="http://"+serverIp+":"+port+"/IntelligentCabinetAPIServer/ReportStatus";
	Map<String, Object> map = new HashMap<String, Object>();
	map.put("StoreCode", StoreCode);//库码 string
	map.put("QuNo",QuNo);//区号 int
	Result result = getResult(url, map);
	System.err.println("获取温湿度:"+result);
	return result;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值