目录
前言
写这篇文章主要是为了spring cloud 中使用RestTemplate做get,post,put,delete使用。
spring cloud文章链接
RestTemplate GET的使用
返回json数据和返回实体对象代码
/**
*getForEntity调用提供者测试 返回值string json
* @return
*/
@RequestMapping(value="/cloud/getForEntity")
public String getForEntity() {
//get 字符串 接口http://01-springcloud-service-provider/s/hello
/*ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://01-springcloud-service-provider/s/hello", String.class);
String body = responseEntity.getBody();
HttpStatus statusCode = responseEntity.getStatusCode();
int statusCodeValue = responseEntity.getStatusCodeValue();
HttpHeaders headers = responseEntity.getHeaders();
System.out.println(body);
System.out.println(statusCode);
System.out.println(statusCodeValue);
System.out.println(headers);
return restTemplate.getForEntity("http://01-springcloud-service-provider/s/hello", String.class).getBody();*/
//获取 json字符串
ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://01-springcloud-service-provider/s/getForentityListJson", String.class);
String jsonString = responseEntity.getBody();
List<User> lists = JSONObject.parseArray(jsonString, User.class);
HttpStatus statusCode = responseEntity.getStatusCode();
int statusCodeValue = responseEntity.getStatusCodeValue();
HttpHeaders headers = responseEntity.getHeaders();
System.out.println(jsonString);
System.out.println(statusCode);
System.out.println(statusCodeValue);
System.out.println(headers);
return restTemplate.getForEntity("http://01-springcloud-service-provider/s/hello", String.class).getBody();
}
/**
*getForEntity调用提供者测试 返回值string 参数map 或者数组
* getForObject 相当于getForEntity的body。先不写了
* @return
*/
@RequestMapping(value="/cloud/getForEntityList")
public User[] getForEntityList() {
/*传参 方式1
String [] array = {"1","张无敌"};
//返回值使用list.class 不行,必须数组 参数
ResponseEntity<User[]> restTemplateForEntity = restTemplate.getForEntity("http://01-springcloud-service-provider/s/getForentityList?id={0}&name={1}", User[].class,array);
* 方式2 Map<String, Object> paramMap = new ConcurrentHashMap<>();
paramMap.put("id", 1);
paramMap.put("name", " 张无忌");
restTemplate.getForEntity("http://01-SPRINGCLOUD-SERVICE-PROVIDER/service/hello?id={id}&name={name}", String.class, paramMap).getBody();
* */
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("id", 1);
paramMap.put("name", " 张无忌");
//返回值使用list.class 不行,必须数组 参数
ResponseEntity<User[]> restTemplateForEntity = restTemplate.getForEntity("http://01-springcloud-service-provider/s/getForentityList?id={id}&name={name}", User[].class,paramMap);
User[] body = restTemplateForEntity.getBody();
List<Order> list = body[0].getList();
for (Order order : list) {
System.out.println(order.getId());
}
return restTemplate.getForEntity("http://01-springcloud-service-provider/s/getForentityList?id={id}&name={name}", User[].class,paramMap).getBody();
}
因为getForObject 与getForEntity 使用类似,只不过 getForObject 是在getForEntity 基础上进行了再次封装,可以将 http 的响应体 body
信息转化成指定的对象,方便我们的代码开发;当你不需要返回响应中的其他信息,只需要 body 体信息的时候,可以使用这个更方便;
RestTemplate POST的使用
消费者:
/**
*post测试
* @return
*/
@RequestMapping(value="/cloud/post")
public User post() {
//post请求表单传参 注意 导包 import org.springframework.util.MultiValueMap;
MultiValueMap<String,User> datamap = new LinkedMultiValueMap<String,User>();
List<Order> listO = new ArrayList<>();
listO.add(new Order(1,"ls1"));
listO.add(new Order(2,"ls2"));
datamap.add("user",new User(1,"zss",listO));
ResponseEntity<User> restTemplateForEntity = restTemplate.postForEntity("http://01-springcloud-service-provider/s/post",datamap,User.class);
return restTemplate.postForEntity("http://01-springcloud-service-provider/s/post",datamap,User.class).getBody();
}
提供者接口:
/**
* 测试返回 post
* @return
*/
@RequestMapping(value = "/s/post",method = RequestMethod.POST)
public User post(@RequestParam("user") String user){
User user1 = JSON.parseObject(user, User.class);
return user1;
}
RestTemplate PUT的使用
与post基本一致,除了没有返回值,类似update。
RestTemplate DELETE的使用
和get一样。