RestTemplate 使用案例

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/LitongZero/article/details/99877510

RestTemplate 使用案例

当我们使用SpringBoot时,偶尔需要使用HttpClient进行接口访问等。
而,在SpringBoot 中,内置了一个工具类RestTemplate
在微服务之间相互调用时,也可以使用,虽然没有FeignClient方便,但是性能却是非常出色的。

1.调用有两种方法

  • ...ForEntity
  • ...ForObject
比较
...ForObject()...ForEntity()多包含了将结果中的属性转成对象的功能,而...ForEntity可以拿到请求头等信息。所以,具体用哪种方法还是要看实际情况。
其中...ForObject方法如下,使用实体类接受,传入实体类即可。
User user = restTemplate.getForObject(UrlConstants.TEST_ONE_URL, User.class);
以下演示使用...ForEntity方法。

2.RestTemplate对象创建声明。

如果使用Spring,可直接声明Bean,如下

SpringBoot可在Application.java中添加。

@Bean(value = "baseRestTemplate")
public RestTemplate restTemplate(){
    return new RestTemplate();
}

其他地方使用,使用注解声明。

@Autowired
RestTemplate restTemplate;

2.Get不带参数调用

ResponseEntity<String> forObject = restTemplate.getForEntity("http://127.0.0.1:18980/api/get", String.class);
// 获取请求体信息,转换为JSON对象。
JSONObject jsonObject = JSONUtil.parseObj(forObject.getBody());

3.Get带参数调用

注意url中的占位符

// 注意url中的占位符
String url= "http://127.0.0.1:18980/api/getParams?name={name}&age={age}&sex={sex}&tel={tel}";
Map<String, Object> params = new HashMap<>();
params.put("name", "restTemplate");
params.put("age", 22);
params.put("sex", 1);
params.put("tel", "515611");
ResponseEntity<String> forObject = restTemplate.getForEntity(url, String.class, params);
// 获取请求体信息,转换为JSON对象。
JSONObject jsonObject = JSONUtil.parseObj(forObject.getBody());

4.Post不带参数调用

ResponseEntity<String> forObject = restTemplate.postForEntity("http://127.0.0.1:18980/api/post", null, String.class);
// 获取请求体信息,转换为JSON对象。
JSONObject jsonObject = JSONUtil.parseObj(forObject.getBody());

5.Post带参数调用

Map<String, Object> params = new HashMap<>();
params.put("name", "restTemplate");
params.put("age", 22);
params.put("sex", 1);
params.put("tel", "515611");
ResponseEntity<String> forObject = restTemplate.postForEntity("http://127.0.0.1:18980/api/postParams", params, String.class);
// 获取请求体信息,转换为JSON对象。
JSONObject jsonObject = JSONUtil.parseObj(forObject.getBody());

6.提供一个测试Controller

@Controller
@ResponseBody
@RequestMapping(value = "api")
public class HttpController {

    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/get")
    public HashMap<String, Object> getApiState() {
        HashMap<String, Object> map = new HashMap<>(4);
        int code = 200;
        String msg = "Get Message";
        List<Object> data = new ArrayList<>(4);
        data.add("list1");
        data.add("list2");
        data.add("list3");
        data.add("list4");

        map.put("code", code);
        map.put("msg", msg);
        map.put("data", data);

        return map;
    }


    @GetMapping("/getParams")
    public HashMap<String, Object> getParams(User user) {
        System.out.println(user);

        HashMap<String, Object> map = new HashMap<>(4);
        int code = 200;
        String msg = "Get Message";
        map.put("code", code);
        map.put("msg", msg);
        map.put("data", user);

        return map;
    }

    @PostMapping("/post")
    public HashMap<String, Object> post() {
        HashMap<String, Object> map = new HashMap<>(4);
        int code = 202;
        String msg = "Get Message";

        User user = new User();
        user.setName("ltz");
        user.setAge(19);
        user.setSex(0);
        user.setTel("15857855");

        map.put("code", code);
        map.put("msg", msg);
        map.put("data", user);

        return map;
    }

    @PostMapping("/postParams")
    public HashMap<String, Object> post(@RequestBody User user) {
        System.out.println(user);

        HashMap<String, Object> map = new HashMap<>(4);
        int code = 201;
        String msg = "Post Message";
        map.put("code", code);
        map.put("msg", msg);
        map.put("data", user);

        return map;
    }

}

@Data
class User {
    private String name;
    private Integer age;
    private Integer sex;
    private String tel;
}

猜你喜欢

转载自blog.csdn.net/LitongZero/article/details/99877510