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);

持续更新....

相关推荐
Hilaku1 分钟前
为什么我不再相信 Tailwind?三个月重构项目教会我的事
前端·css·前端框架
一张假钞1 分钟前
Linux 下 ChromeDriver 安装
linux·运维·服务器
FogLetter2 分钟前
JavaScript 的历史:从网页点缀到改变世界的编程语言
前端·javascript·http
鹏北海4 分钟前
Vue3+TS的H5项目实现微信分享卡片样式
前端·微信
shark-chili4 分钟前
Java并发编程哲学系列汇总
linux·运维·服务器·操作系统
轻颂呀6 分钟前
进程——环境变量及程序地址空间
前端·chrome
lyc2333339 分钟前
鸿蒙Stage模型:轻量高效的应用架构「舞台革命」🎭
前端
lyc2333339 分钟前
鸿蒙开发必备:应用配置的「黄金法则」📝
前端
工呈士10 分钟前
React 性能监控与错误上报
前端·react.js·面试
Candy_Lucky11 分钟前
AJAX 是开发者的梦想
前端