admin管理员组

文章数量:1794759

分析Not enough variable values available to expand ‘xxx‘

分析Not enough variable values available to expand ‘xxx‘

目录
  • 描述
  • 示例
  • 分析

描述

   在此记录一下使用RestTemplate过程中所踩到的一个坑(参数映射中的传值问题)。

示例

**错误示例:**Map<Object,Object>

@Configuration public class RestTemplateUtil{ @Autowired RestTemplate getRestTemplate public final static String NULL_ERROR_MSG = "该参数值不能为空,请检查参数值"; /** * 常规POST * @param url 请求地址 * @return JSONObject */ public Object postResource(String url, Map<Object, Object> params) { Assert.notEmpty(params, NULL_ERROR_MSG); return Objects.requireNonNull(getRestTemplate.postForObject(url, null, String.class, params)); } } @SpringBootTest public class Test{ String urlRes7 = "127.0.0.1:18080/demo/getUser/id/{id}/name/{name}"; @Test void contextLoads() { Map<Object, Object> map = new HashMap<>(); map.put("id", "456"); map.put("ni", "1234"); System.out.println(resttemplaterestTemplateUtil.postResource(urlRes7, map)); } } 报错代码:Not enough variable values available to expand ‘xxx‘,遇见这个错的时候,如果你要不仔细观察的话, 那么这个错误会让你摸不到头绪,就会让自己陷入这个问题对应的解决办法中:“值没有映射上,只需要映射上值即可”, 这个观点,但实际的问题却是参数类型的原因,所以当遇到问题的时候一定要仔细观察, 观察一下执行流程,这样的话,你会很快定位到问题所在。

正确示例:Map<String,Object>

@Configuration public class RestTemplateUtil{ @Autowired RestTemplate getRestTemplate public final static String NULL_ERROR_MSG = "该参数值不能为空,请检查参数值"; /** * 常规POST * @param url 请求地址 * @return JSONObject */ public Object postResource(String url, Map<String, Object> params) { Assert.notEmpty(params, NULL_ERROR_MSG); return Objects.requireNonNull(getRestTemplate.postForObject(url, null, String.class, params)); } } @SpringBootTest public class Test{ String urlRes7 = "127.0.0.1:18080/demo/getUser/id/{id}/name/{name}"; @Test void contextLoads() { Map<String, Object> map = new HashMap<>(); map.put("id", "456"); map.put("ni", "1234"); System.out.println(resttemplaterestTemplateUtil.postResource(urlRes7, map)); } } 分析

   RestTemplate的方法参数对象是Map<String,Object>类型,不支持Map<Object,Object>类型,如果使用Map<Object,Object>类型的话,虽然不会报错,但是会一直提示Not enough variable values available to expand ‘xxx‘错误,即使你调试到底层查看,也无法快速定位到问题,所以严格按照方法的指定类型是很重要的。

本文标签: valuesvariablexxxexpand