Springboot与RestTemplate

RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。

一、使用Get进行访问

1、获取json格式

使用 getForEntity() API 发起 GET 请求:

java 复制代码
RestTemplate restTemplate = new RestTemplate();
        String fooResourceUrl = "http://localhost:8080/spring-rest/foos";
        ResponseEntity<String> response = restTemplate.getForEntity(fooResourceUrl + "/1", String.class);
        System.out.println(response.getStatusCode());

可以访问完整的 HTTP 响应,因此可以检查 HTTP 状态码是否成功,或者处理响应体:

java 复制代码
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(response.getBody());
JsonNode name = root.path("name");
System.out.println(name.asText());

如上,将响应体作为标准字符串(String)返回,并使用 Jackson(以及 Jackson 提供的 JSON 节点结构)来验证一些细节。

2、获取pojo格式

可以将响应直接映射到资源 DTO:

java 复制代码
public class Foo implements Serializable {
    private long id;

    private String name;
    // 标准的 get 、set 方法
}

只需要调用 template 的 getForObject API 即可:

java 复制代码
Foo foo = restTemplate.getForObject(fooResourceUrl + "/1", Foo.class);
Assertions.assertNotNull(foo.getName());
Assertions.assertEquals(foo.getId(), 1L);

二、使用Post进行访问

1、传递表单参数

可以使用 postForLocation()postForObject()postForEntity() 方法 在 API 中创建新资源。前者(postForLocation)返回新创建资源的 URI,后者返回资源本身。

java 复制代码
    // 创建请求头对象
        HttpHeaders headers = new HttpHeaders();
        // 设置请求内容类型 表单上传编码格式为application/x-www-form-urlencoded
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        // 请求携带的参数与对应的值
        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
        map.add("username", USER_NAME);
        map.add("password", PASSWORD);
        // HttpEntity表示http的request和resposne实体,它由消息头和消息体组成。
        // 从HttpEntity中可以获取http请求头和回应头,也可以获取http请求体和回应体信息。
        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
        return restTemplate.postForObject(TOKEN_URL, request, ComplainWorkToken.class);

2、传递json参数

java 复制代码
        HttpHeaders headers = new HttpHeaders();
        // 设置请求头是json
        headers.add("Content-Type", MediaType.APPLICATION_JSON_UTF8_VALUE);
        // 携带的json参数格式
        Map<String, Object> map2 = new HashMap<>();
        map2.put("pageNo", pageNo);
        map2.put("pageSize", pageSize);
        map2.put("endTime", endTime);
        map2.put("startTime", startTime);
        HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(map2, headers);
        ComplainWorkResponse complainWorkResponse = restTemplate.postForObject(url, httpEntity, ComplainWorkResponse.class);
        assert complainWorkResponse != null;
        return complainWorkResponse.getComplainWorkData().getList();
相关推荐
胖头鱼不吃鱼-几秒前
微服务拆分的原则、时机、方法以及常见问题
java·微服务·架构
Ascend20155 分钟前
Clickhouse常用函数
java·clickhouse
红云梦12 分钟前
互联网三高-高性能之JVM调优
java·jvm·互联网三高架构
图梓灵15 分钟前
解析Java根基:Object类核心方法
java·开发语言·jvm
爱分享的淘金达人16 分钟前
25年河南事业单位报名详细流程图解
java·python·小程序·tomcat·流程图
猿java17 分钟前
一个HTTP请求,对方竟然知道我在哪个国家?
java·分布式·面试
User_芊芊君子21 分钟前
【Java实战】——手撕斐波那契数列
java·开发语言
bing_15821 分钟前
如何在 Spring Boot 项目中使用 MyBatis 进行批量操作以提升性能?
spring boot·后端·mybatis·性能提升
理智的灰太狼32 分钟前
微服务多模块构建feign项目过程与一些报错(2025详细版)
java·微服务·架构
汤姆大聪明42 分钟前
Nacos服务发现和配置管理
java·spring boot·spring cloud·服务发现