spring restTemplate的使用和学习总结

44 篇文章 0 订阅
12 篇文章 0 订阅
本文介绍了Spring框架中RestTemplate的使用方法,包括创建实例、配置为Bean、注入服务以及GET、POST、PUT、DELETE等请求示例。同时提到Spring5推荐使用WebClient替换RestTemplate。
摘要由CSDN通过智能技术生成

一、简要介绍

在 Spring 内,RestTemplate 是一个非常方便的 HTTP 客户端。虽然在 Spring 5 中 WebClient 是推荐的替代方法用于进行异步请求,但 RestTemplate 依然被广泛使用于同步请求场景。以下是一些使用 RestTemplate 的基础用法示例。

二、创建实例 或在spring 中配置为Bean

第一种

RestTemplate restTemplate = new RestTemplate();

第二种
在 Spring 应用中,可以将 RestTemplate 作为一个 Bean 来配置:

@Configuration
public class RestTemplateConfig {
  
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }
}

也可以如下:

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplateBuilder()
                .setConnectTimeout(10 * 1000)
                .setReadTimeout(10 * 1000)
                .build();
    }
}

三、注入到服务中

@Service
public class MyService {

    private final RestTemplate restTemplate;

    @Autowired
    public MyService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }
    
    // 你的方法...
}

或直接

 @Autowired
 private RestTemplate restTemplate;

三、使用案例

发起 GET 请求

获取字符串:

String url = "http://example.com/resource";
String result = restTemplate.getForObject(url, String.class);

获取对象:

String url = "http://example.com/resource/{id}";
MyObject result = restTemplate.getForObject(url, MyObject.class, "123");

发起 POST 请求

提交表单并接收 String:

String url = "http://example.com/resource";
Map<String, String> form = new HashMap<>();
form.put("field", "value");

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

HttpEntity<Map<String, String>> request = new HttpEntity<>(form, headers);
String result = restTemplate.postForObject(url, request, String.class);

返回指定结构体添加请求头与表单内容等

		String url = "http://example.com/resource";
		
		HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        headers.add("xxxxx", 某个值);
        headers.add("xxxxx", 某个值);

		// 添加表单内容
        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
        map.add("xxxx", 某个值);
        map.add("xxxx", 某个值);
        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);

        ResponseEntity<Map> response = restTemplate.postForEntity(url, request, Map.class);

        response.getBody();

提交 JSON 数据:

String url = "http://example.com/resource";
MyObject obj = new MyObject();

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);

HttpEntity<MyObject> request = new HttpEntity<>(obj, headers);
MyObject result = restTemplate.postForObject(url, request, MyObject.class);

PUT 和 DELETE 请求

PUT 请求:

String url = "http://example.com/resource/{id}";
MyObject updatedObject = new MyObject();

restTemplate.put(url, updatedObject, "123");

DELETE 请求:

String url = "http://example.com/resource/{id}";
restTemplate.delete(url, "123");

使用 exchange 方法

exchange 方法是更通用的方法,你可以用它来发起 GET、POST、PUT、DELETE 等任何 HTTP 方法的请求。以下是一个 GET 请求的例子:

String url = "http://example.com/resource";
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer yourtokenhere");

HttpEntity<String> entity = new HttpEntity<>(headers);

ResponseEntity<MyObject> response = restTemplate.exchange(
        url, 
        HttpMethod.GET, 
        entity, 
        MyObject.class);

MyObject result = response.getBody();

RestTemplate 在 Spring 5 中已被 WebClient 所取代。如果你正在开发一个新的 Spring 应用,考虑使用 WebClient 来满足你的 HTTP 客户端需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值