RestTemplate 调接口总结

    RestTemplate调接口其实就是用RestTemplate 相应的方法做CRUD,但是不知道为啥我做的时候就不顺,所以也是一个人大门不出二门不迈在家写了个demo研究一下

    总体脉络还是按GET POST DELET PUT 把每种情况说一下吧(其实本人也是菜鸟一枚,不足之处请多多指正!)

所调用接口统一都是这样的(可能不带参数):

String src = "http://localhost:8082/sys/sendmessagecode/sendcode?phoneNumber="+phoneNumber;

(一)GET
    1:不带参数的
我这个是用getForEntity调用的(代码如下),因为是GET肯定不能用postForObject()这种post开头的方法。也可以用
new RestTemplate().execute()或new RestTemplate().exchange()这种来调用

public List<SysUser> face() {
    String src = "http://localhost:8082/sys/user/jk";
    ResponseEntity<List> forEntity = new RestTemplate().getForEntity(src, List.class);
    List<SysUser> body = forEntity.getBody();
    System.out.println(body);
    return body;
}

    2:带参数的(String str,String type)这种的(代码如下)
这种需要特别注意:拼接参数时直接用代码在

? phoneNumber="+phoneNumber; 

正确代码如下:

@RequestMapping(value = "/facecheck",method = RequestMethod.GET)
public Map<String,Object> face(@RequestParam(value = "phoneNumber",required = false) String phoneNumber) {
String src = "http://localhost:8082/sys/sendmessagecode/sendcode?      phoneNumber="+phoneNumber;
ResponseEntity<Map> exchange = new RestTemplate().exchange(src, HttpMethod.POST, HttpEntity.EMPTY, Map.class);
return exchange.getBody();
}

这种,不能先写http://localhost:8082/sys/sendmessagecode/sendcode再利用其他类似于MultiValueMap来拼接(反正我是没有成功,可能我太菜了)

 MultiValueMap<String,Object> map = new LinkedMultiValueMap<String,Object>();
 map.add("phoneNumber",phoneNumber);

(二)POST
    这种只介绍参数时实体对象的(代码如下)(当然其他调用方法也有很多)

@RequestMapping(value = "/facecheck",method = RequestMethod.GET)
public SysUser face(@RequestParam(value = "phoneNumber",required = false) String phoneNumber) {
   String src = "http://localhost:8082/sys/user/saveListSys";
   SysUser sysUser =new SysUser();
   sysUser.setUserName("kllol");
   sysUser.setSex("njnj");
   HttpHeaders headers = new HttpHeaders();
   headers.setContentType(MediaType.APPLICATION_JSON);
   headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
   HttpEntity httpEntity = new HttpEntity(sysUser,headers);
   ResponseEntity<SysUser> forEntity = new RestTemplate().postForEntity(src,httpEntity, SysUser.class);
   return  forEntity.getBody();

}

如果参数是(String str,String type) 这种可以拼接成这样:

String src = "http://localhost:8082/sys/sendmessagecode/sendcode?phoneNumber="+phoneNumber;

(三)DELETE
用new RestTemplate().delete 方法(代码如下)

@ApiOperation(value = "人脸识别",notes = "人脸识别")
@RequestMapping(value = "/facecheck",method = RequestMethod.GET)
public void face(@RequestParam(value = "id",required = true) String id) {
    String src = "http://localhost:8082/sys/user/deleteListSys/{id}?id="+id;
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
    HttpEntity httpEntity = new HttpEntity(null,headers);
    new RestTemplate().delete(src,id);
}

(四)PUT
这里和DELETE 差不多用 new RestTemplate().put 方法调用。所以不再赘述

扫描二维码关注公众号,回复: 8988707 查看本文章

(五)返回值问题以及HttpEntity问题

 MultiValueMap<String,Object> map = new LinkedMultiValueMap<String,Object>();
  map.add("phoneNumber",phoneNumber);
  HttpHeaders headers = new HttpHeaders();
  headers.setContentType(MediaType.APPLICATION_JSON);
  headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
  headers.add("Accept", "application/json");//请求头
  HttpEntity<MultiValueMap<String,Object>> httpEntity = new HttpEntity(headers,map);

    (1)如果你代码中设置了HttpEntity , HttpEntity<MultiValueMap<String,Object>> httpEntity = new HttpEntity(headers,map);这里hearders,map没有可以直接在里面写null或者一个写一个不写但是返回值肯定是

ResponseEntity<Map> forEntity = new RestTemplate().postForEntity(src,httpEntity, Map.class);

用ResponseEntity接收的返回值

    (2)类似于这种方法中有HttpEntity<?> httpEntity (代码如下)

<T> org.springframework.http.ResponseEntity<T> exchange(java.lang.String s, org.springframework.http.HttpMethod httpMethod, @org.springframework.lang.Nullable org.springframework.http.HttpEntity<?> httpEntity, java.lang.Class<T> aClass, java.lang.Object... objects) throws org.springframework.web.client.RestClientException;

如果实际不需要httpEntity 则可以写为 HttpEntity.EMPTY

发布了163 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41987908/article/details/104205803