1.定义HttpGetRequestWithEntity实现HttpEntityEnclosingRequestBase抽象类,以支持GET请求携带body数据
没办法,第三方提供的接口不按照标准套路来,只能重写RestTemplate的
定义HttpGetRequestWithEntity实现HttpEntityEnclosingRequestBase抽象类,以支持GET请求携带body数据。
package com.sugon.cloud.utils;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpUriRequest;
import org.springframework.http.HttpMethod;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import java.net.URI;
/**
* @Auther: liuysh
* @Date: 2021/7/24 10:18
* @Description:
*/
public class HttpComponentsClientRestfulHttpRequestFactory extends HttpComponentsClientHttpRequestFactory {
@Override
protected HttpUriRequest createHttpUriRequest(HttpMethod httpMethod, URI uri) {
if (httpMethod == HttpMethod.GET) {
return new HttpGetRequestWithEntity(uri);
}
return super.createHttpUriRequest(httpMethod, uri);
}
/**
* 定义HttpGetRequestWithEntity实现HttpEntityEnclosingRequestBase抽象类,以支持GET请求携带body数据
*/
private static final class HttpGetRequestWithEntity extends HttpEntityEnclosingRequestBase {
public HttpGetRequestWithEntity(final URI uri) {
super.setURI(uri);
}
@Override
public String getMethod() {
return HttpMethod.GET.name();
}
}
}
使用样例
public class RestTemplateUtils {
public static HttpEntity<String> getHeader(String param){
HttpHeaders headers = new HttpHeaders();
headers.add("X-Auth-Token", getHeaderAuthorization() );
// MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
return new HttpEntity<>(param, headers);
}
public static void main(String[] args) {
RestTemplate restTemplate=new RestTemplate();
restTemplate.setRequestFactory(new HttpComponentsClientRestfulHttpRequestFactory());
String url="http://get.com";
String param="{\"name\": \"liuyunshengsir\"}";
ResponseEntity<JSONObject> responseEntity = restTemplate.exchange(url, HttpMethod.GET, getHeader(param), JSONObject.class);
System.out.println("ok !!!");
}
}