RestTemplate.postForEntity 方法进行 HTTP POST 请求

前言

RestTemplate 是 Spring Framework 提供的一个用于处理 HTTP 请求的客户端工具。其中,postForEntity 是 RestTemplate 提供的用于发送 HTTP POST 请求并返回 ResponseEntity 对象的方法。

public <T> ResponseEntity<T> postForEntity(String url, Object request, Class<T> responseType, Object... uriVariables)

参数说明:

  • url(String 类型):请求的目标 URL。可以是一个字符串形式的 URL,也可以是一个 URI 对象。示例:“http://example.com/api”。
  • request(Object 类型):表示要发送的请求体内容。可以是一个简单对象、一个 HttpEntity 对象或一个 MultiValueMap(用于传递表单数据)。根据实际需要确定所需的请求体内容。
  • responseType(Class 类型):表示期望的响应类型。可以是任何 Java 类型,包括自定义类型。例如,如果期望返回一个 User 对象,则可以将其设置为 User.class。
  • uriVariables(Object… 类型):可选参数,用于填充 URL 中的占位符。如果 URL 中包含占位符,可以通过这个参数来提供具体的值。
  • uri(URI 类型):可选参数,代替 url 参数,用于指定完整的请求目标 URI。

样例:

		@Autowired
		private RestTemplate restTemplate;
		// 请求 URL
        String url = "http://example.com/api";		
		//构建请求体
		Map<String, Object> param = new HashMap<>();
        param.put("provinceCode",pojo.getProvinceCode());
        param.put("licenseCode",pojo.getLicenseCode());
        param.put("ownerName",pojo.getOwnerName());
        param.put("organizationCode",pojo.getOrganizationCode());
        param.put("dataMasking",pojo.isDataMasking());
		
		HttpHeaders headers = new HttpHeaders();
        headers.set("Accept", "application/json");
        headers.set("Channel", "secureTerminal");
        headers.set("token", yz_access_token);
        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
        HttpEntity<String> entity = new HttpEntity<>(JSON.toJSONString(param), headers);
		ResponseEntity<String> postForEntity = restTemplate.postForEntity(url, entity, String.class);
         // 获取响应结果
        HttpStatus statusCode = postForEntity .getStatusCode();
        HttpHeaders headers = postForEntity .getHeaders();
        String body = postForEntity .getBody();
        // 处理响应结果
        System.out.println("Status Code: " + statusCode);
        System.out.println("Response Headers: " + headers);
        System.out.println("Response Body: " + body);

注意事项:

  • 如果使用 url 参数,uriVariables 参数将用于替换 URL 中的占位符。

  • 如果使用 uri 参数,则忽略 url 和 uriVariables 参数。

  • 如果请求需要设置请求头或其他配置信息,可以使用 HttpEntity 对象构建请求。

工作原理:

首先,RestTemplate 构建一个 HTTP POST 请求,包括请求头、请求体、URL等信息。

请求体数据(request 参数)会被序列化为请求体内容,通常是 JSON 或表单数据,具体的序列化方式取决于请求的内容类型(Content-Type)。

RestTemplate 发送 HTTP POST 请求到指定的 url。

当服务端响应返回时,RestTemplate 接收响应,包括响应头和响应体。

响应体的数据会被反序列化为指定的 responseType 类型,以便在 Java 中使用。

最后,postForEntity 方法返回一个 ResponseEntity 对象,其中包括响应状态码、响应头和反序列化后的响应体数据。


总结

如果此篇文章有帮助到您, 希望打大佬们能关注点赞收藏评论支持一波,非常感谢大家!
如果有不对的地方请指正!!!

参考1
参考2
参考3

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lfwh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值