当前位置:朝夕网 » 数码科技 » 日常问题随笔 | 21.11.29

日常问题随笔 | 21.11.29

使用resttemplate调用外部put请求,提示‘400 bad request’问题描述:今天在项目内部调用外部put类型api时出现以下报错:我请求的api的url地址是参数在中间的这种:/a

使用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到工具类RestTemplateUtils ResponseEntity 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); }

尝试结果:依然报错

尝试-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”的详细内容,希望对大家有所帮助!

免责声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如有侵权行为,请第一时间联系我们修改或删除,多谢。朝夕网 » 日常问题随笔 | 21.11.29