关于restTemplate的get和post请求,header设置及传参方式

时间:2025-03-20 07:40:17
@Autowired private RestTemplate restTemplate String url="/v3/weather/weatherInfo?city=110101&key=3ff9482454cb60bcb73f65c8c48d4209](/v3/weather/weatherInfo?city=110101&key=3ff9482454cb60bcb73f65c8c48d4209)"; //无参 不用指定header的请求 JSONObect jsonobject=restTemplate.getForObject(url,JSONObject.class); //无参指定header的请求 HttpHeaders headers = new HttpHeaders(); headers.set("Accept", "application/json"); HttpEntity<JSONObject> httpEntity = new HttpEntity<>( headers); JSONObject jsonobject=restTemplate.getForObject(url,JSONObject.class,httpEntity); //指定header HttpHeaders headers = new HttpHeaders(); headers.set("mdmAppId", mdmAppId); headers.set("mdmToken", mdmToken); log.info("tyccompstafflistUrl request headers {}",headers); HttpEntity<JSONObject> httpEntity = new HttpEntity<>( headers); ResponseEntity<JSONObject> exchange = restTemplate.exchange(tyccompbase, HttpMethod.GET, httpEntity, JSONObject.class); JSONObject jsonObject = exchange.getBody(); //有参,param方式的参数【参数是拼接在url路径上】 Map<String, Object> params = new HashMap<>(); params.put("param1", "value1"); params.put("param2", "value2"); JSONObject jsonobject=restTemplate.getForObject(url,JSONObject.class,params); //有参,请求体body中json【较少见,调用方式如下:】 因为restTemplate默认使用的jdk的requestfactory,这种方式不支持get请求这样的传参,故需要将restTemplate的requestfactory设置为自定义的requestfactory继承HttpEntityEnclosingRequestBase具体如下: private static final class HttpComponentsClientHttpRequestWithBodyFactory extends HttpComponentsClientHttpRequestFactory { @Override protected HttpUriRequest createHttpUriRequest(HttpMethod httpMethod, URI uri) { if (httpMethod == HttpMethod.GET) { return new HttpGetRequestWithEntity(uri); } return super.createHttpUriRequest(httpMethod, uri); } } private static final class HttpGetRequestWithEntity extends HttpEntityEnclosingRequestBase { public HttpGetRequestWithEntity(final URI uri) { super.setURI(uri); } @Override public String getMethod() { return HttpMethod.GET.name(); } } 此种方式下的调用 String temp="";//参数的json串 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.set("Accept", "application/json"); HttpEntity<JSONObject> httpEntity = new HttpEntity(temp, headers); RestTemplate restTemplate = new RestTemplate(); restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestWithBodyFactory());//或者在注入之前set该requestfactory ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class); String body = exchange.getBody();