前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >RestTemplate post请求返回状态码415「建议收藏」

RestTemplate post请求返回状态码415「建议收藏」

作者头像
全栈程序员站长
发布2022-08-28 13:19:19
发布2022-08-28 13:19:19
2K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

背景:

跨模块通过post请求调用指定接口,返回415

415状态码解释:

Unsupported Media Type

对于当前请求的方法和所请求的资源,请求中提交的实体并不是服务器中所支持的格式,因此请求被拒绝

错误日志:

org.springframework.web.client.HttpClientErrorException: 415 null atorg.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:86) at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:708)

功能错误代码和正常代码比对

异常请求返回415:

代码语言:javascript
代码运行次数:0
复制
RestTemplate restTemplate = new RestTemplate();
String url = "http://172.16.17.82/portal/zcm-cmdb/remote/exec";
 String cmd = "mkdir -p /tmp/lushuan/test5";
// 1、异常请求返回 415
 HttpHeaders headers = new HttpHeaders();
 MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
 map.add("host", "172.16.24.220");
 map.add("user", "root");
 map.add("cmd", cmd);
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
Object data = restTemplate.postForObject(url,request,Object.class);
LOGGER.info("TestRestTemplate testInstallCollectdByRemote data = {}", data);

正常代码演示1:

代码语言:javascript
代码运行次数:0
复制
 RestTemplate restTemplate = new RestTemplate();
String url = "http://172.16.17.82/portal/zcm-cmdb/remote/exec";
String cmd = "mkdir -p /tmp/lushuan/test6";
Map<String, String> map = new HashMap<>();
map.put("host","172.16.24.220");
map.put("user","root");
map.put("cmd",cmd);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Map<String, String>> request = new HttpEntity<>(map, headers);
JSONObject data = restTemplate.postForObject(url,request, JSONObject.class);
LOGGER.info("TestRestTemplate testInstallCollectdByRemote data = {}", data);

正常代码演示2:

代码语言:javascript
代码运行次数:0
复制
RestTemplate restTemplate = new RestTemplate();
String url = "http://172.16.17.82/portal/zcm-cmdb/remote/exec";
String cmd = "mkdir -p /tmp/lushuan/test7";
Map<String, String> map = new HashMap<>();
map.put("host","172.16.24.220");
map.put("user","root");
map.put("cmd",cmd);
// ParameterizedTypeReference 该类的目的是启用捕获和传递泛型
ParameterizedTypeReference<String> typeRef = new ParameterizedTypeReference<String>() {
};
JSONObject createDbJsonObject = JSONObject.fromObject(map);
HttpEntity<JSONObject> entityPost = new HttpEntity<JSONObject>(createDbJsonObject);
ResponseEntity<String> createDbResponse = restTemplate.exchange(url, HttpMethod.POST, entityPost,typeRef);
HttpStatus statusCode = createDbResponse.getStatusCode();
LOGGER.info("TestRestTemplate testInstallCollectdByRemote createDbResponse = {}", createDbResponse);
LOGGER.info("TestRestTemplate testInstallCollectdByRemote statusCode = {}", statusCode);

两段代码的实现方式都可以,推荐第二种,可以获取返回的状态码,是否跨域等信息。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146140.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档