使用resttemplate调用外部put请求 , 提示‘400 bad request’
问题描述:今天在项目内部调用外部put类型api时出现以下报错:
我请求的api的url地址是参数在中间的这种:/a/b/{参数}/c/{参数2}
分析应该是参数传递的方式不对,导致该错误
解决方案尝试
在网上搜了一些相关问题后,参照网友的解决方案,做了以下尝试
尝试-1:使用exchange方法
HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();map.add(category_id,category_value);MultiValueMap<String, String> map2= new LinkedMultiValueMap<String, String>();map2.add("id",parent_id);map2.add("category_id",category_id.split("_")[0]);try{//封装RestTemplate到工具类RestTemplateUtilsResponseEntity responseEntity = RestTemplateUtils.put("https://…../api/v1/nodes/{id}/categories/{category_id}/",headers, map,String.class,map2);}catch (Exception e){log.error(e.getMessage());}//RestTemplate工具类RestTemplateUtils实现/*** PUT请求调用方式* @param url 请求URL* @param headers 请求头参数* @param requestBody 请求参数体* @param responseType 返回对象类型* @param uriVariables URL中的变量,与Map中的key对应* @return ResponseEntity 响应对象封装类*/public static <T> ResponseEntity<T> put(String url, HttpHeaders headers, Object requestBody, Class<T> responseType, Map<String, ?> uriVariables) {HttpEntity<Object> requestEntity = new HttpEntity<Object>(requestBody, headers);return geTemplate().exchange(url, HttpMethod.PUT, requestEntity, responseType, uriVariables);}
尝试结果:依然报错
【日常问题随笔 | 21.11.29】尝试-2:使用put方法,修改工具类里的方法为put方法
/* * PUT请求调用方式* @param url 请求URL* @param headers 请求头参数* @param requestBody 请求参数体* @param responseType 返回对象类型* @param uriVariables URL中的变量,与Map中的key对应* @return ResponseEntity 响应对象封装类*/public static <T> ResponseEntity<T> put(String url, HttpHeaders headers, Object requestBody, Class<T> responseType, Map<String, ?> uriVariables) {HttpEntity<Object> requestEntity = new HttpEntity<Object>(requestBody, headers);geTemplate().put(url, requestEntity,uriVariables);return null;}
尝试结果:依然失败
尝试-3:在尝试了网上的各种方法都不奏效之后,我用自己修改的下面这种方法,成功解决问题?。。?
解决方案:修改url的传参·方式
//修改之前:ResponseEntity<String> responseEntity = RestTemplateUtils.put("https://…../api/v1/nodes/{id}/categories/{category_id}/",headers, map,String.class,map2);//修改之后:ResponseEntity<String> responseEntity = RestTemplateUtils.put("https://…../api/v1/nodes/" + parent_id + "/categories/" + category_id.split("_")[0] + "/",headers,map,String.class,map2);//也就是直接将参数放到url里
尝试结果:请求成功!
以上就是朝夕生活(www.30zx.com)关于“日常问题随笔 | 21.11.29”的详细内容,希望对大家有所帮助!
猜你喜欢
- 您浏览的页面无法显示
- 知道解决染色衣服的方法,谁还去干洗店?
- 接口测试的概念、目的、流程、测试方法有哪些?
- 为啥你找电影的时候,老碰到404 NOT FOUND?
- 如何排查 .NET 内存泄漏
- 常见的OutOfMemoryError原因以及相应的处理办法
- 暗黑破坏神4Out of Memory/错误代码解决办法
- 暗黑4out of memory最新有效解决方法
- CRC算法解析