在RestTemplate提供的方法中,有一个参数就是目标URL,参数是跟在后面的一个数量可变参数,但是在这里就有个问题,这个方法怎么知道我传的参数值是对应在目标接口的哪个参数的呢:

public <T> T postForObject(String url, Object request, Class<T> responseType, Object... uriVariables)

  比如有个url的链接是post方式请求,然后需要提供name和id两个参数,返回值是一个json,然后调用:

JSONObject result = restTemplate.postForObject(url, null, JSONObject.class, "张三", "2");


这里就无法分辨张三是name还是2是name。所以post一般是把参数封装到request里面。

JSONObject msg = new JSONObject();
        msg.put("key", "@*2y9$jl");
        msg.put("receiver", receiverEcommerceId);
        msg.put("title", title);
        msg.put("content", content);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity request = new HttpEntity(msg.toJSONString(), headers);
JSONObject result = restTemplate.postForObject(url, request, JSONObject.class);

get方式带参数:

String url=http://test.com/url?param1={param1}&param2={param2};
Map<String, Object> params = new HashMap<>();
params.put("param1", "value1");
params.put("param2", "value2");
JSONObject mutiData = restTemplate.getForObject(url, JSONObject.class, params);

值得一提的是,如果是把url配置在properties配置文件里面的,sax解析会出错,得把&替换成&amp;