RestTemplate远程调用接口方式

1.Post(body空参)

也就是说需要给一个空的json

代码:

java 复制代码
String getDeviceUrl = this.MOVABLE_URL + "detected-data/getMachineLists";
// 远程调用
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));
// 请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("token",token);
// 请求体
HttpEntity<String> requestEntity = new HttpEntity<>("{}", headers);
String resultString = restTemplate.postForObject(getDeviceUrl, requestEntity,String.class);
JSONObject jo = JSONObject.fromObject(resultString);

2.Post(表单)

表单不能给json参数,不然被调用方接收不到参数

代码:

java 复制代码
String url = this.INTERFACE_CLIENT_URL + "/jkglApi/saveLog";
// 远程调用
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));
// 请求头 指定Content-Type为application/x-www-form-urlencoded
HttpHeaders headers = new HttpHeaders();
//headers.setContentType(MediaType.APPLICATION_JSON);
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

// 构建参数
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
params.add("jkglApiCode", interfaceLog.getJkglApiCode());
params.add("ipAddress", interfaceLog.getIpAddress());
params.add("syncDate", interfaceLog.getSyncDate());
params.add("createDate", interfaceLog.getCreateDate());
params.add("statusSync", interfaceLog.getStatusSync().toString());

// 设置请求参数
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(params, headers);

// 发送POST请求
ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);

String resultString = response.getBody();
JSONObject jo = JSONObject.fromObject(resultString);

使用RestTemplate进行表单传参的注意事项

在使用 RestTemplate 进行表单传参时,有一些注意事项需要我们注意。

1.设置Content-Type为application/x-www-form-urlencoded

在发送POST请求时,我们需要设置请求头的Content-Type为 application/x-www-fomm-urlencoded,表示请求体的内容是表单参数。通过 HtpHeaders 类的 setContentType()方法可以实现此功能。
2.使用MultiValueMap存储表单参数

MuivalueMap 是Spring框架提供的一个接口,它继承自 Map 接口,并提供了一些额外的方法,用于存储键值对,在使用 RestTemplate 发送表单参数时,我们可以使用 MutValueMap 来存储表单参数,通过 add0 方法添加键值对。
3.使用HttpEntity封装请求体内容HtpEntty 是 RestTemplate 发送HTTP请求时的一个重要类,它用于封装请求体内容。在发送POST请求时,我们需要创建一个 HpEnity 对象,并将 MultiValueMap 对象和 HttpHeaders 对象作为参数传递进去。

3.Post(表单,方式2)

代码: 这种好像是将参数放到url后面,按理说post不应该这样,但不知道为什么,可以正常访问,被调用方也能获取,不知道为啥....

java 复制代码
String url = this.MOVABLE_URL + "users/login";
// 远程调用
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));
// 请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
// 构建参数
Map<String, String> params= new HashMap();
params.put("username", MOVABLE_USERNAME);
params.put("password", MOVABLE_PASSWORD);
// 2. 构建 URL
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url);
params.forEach(builder::queryParam);
// 请求
ResponseEntity<String> response = restTemplate.exchange(
                    builder.build().toUri(),
                    HttpMethod.POST,
                    new HttpEntity<>(headers),
                    String.class
            );
String resultString = response.getBody();
JSONObject jo = JSONObject.fromObject(resultString);

持续更新....

相关推荐
杨云龙UP6 小时前
Windows SQL Server 备份无法传输至异地共享目录排查处理
运维·服务器·数据库·windows·共享·smb·异地备份传输
用户94688315057506 小时前
四、elpis 基于 vue3 完成动态组件库建设
前端
用户298698530146 小时前
如何在 JavaScript 和 React 中下载/导出 Excel 文件
前端·javascript·react.js
anyup6 小时前
uView Pro 正式支持 MCP 协议!让 AI 秒懂你的组件库
前端·uni-app·ai编程
要开心吖ZSH6 小时前
处方物流信息同步优化:从 36 秒到亚秒级的踩坑记录
java·数据库·mysql·性能优化
Coffeeee6 小时前
从 Android 15 到 Android 17,谷歌猝不及防的音频改动
android·前端·google
Wang's Blog6 小时前
JavaWeb快速入门: MyBatis入门与实战
java·mybatis
雪隐6 小时前
用Flutter做背单词APP-00前言
前端·人工智能·后端
何时梦醒6 小时前
前端存储全攻略 & JavaScript this 绑定完全指南
前端·javascript·面试
前端百草阁7 小时前
JavaScript 设计模式(23 种)
开发语言·前端·javascript·设计模式