Spring MVC ResetクライアントRestTemplate詳細
13051 ワード
目次
Rest Template Resetテンプレートの概要
Http GET要求
Http Postリクエスト
Rets Templateタイムアウト時間
OkHttpClientクライアントを切り替えます.
Rest Template Resetテンプレートの概要
負荷バランス(@LoadBalanced)を有するRestit Templateは、マイクロサービス名を使用して要求を開始しなければならず、ip:portを使用して負荷均衡(@LoadBalanced)を持たないRestit Templateは、マイクロサービス名を使用して要求を開始することができず、ip:portのみを使用することができる.
1、org.springframe ewark.web.client.Restit Template類はspring-web-x.x.RELEASE.jarパッケージの下でHTTP訪問を行うRESTクライアントコアクラスです.
2、Javaアプリケーションのバックグラウンドコードの中で、他のJavaアプリケーションにHttp要求を開始する場合、通常はApachのHttpClientライブラリを使用します.一方、spring cloudマイクロサービスアーキテクチャでは、各マイクロサービス間で頻繁にhttp要求を開始して通信するので、springはhttp要求をカプセル化して、より便利に利用できるようにする.
3、Rets Template類は、restスタイルの方式で、GET、POST、PUT、DELETE、HEAD、OPTNSなどの異なる方式でサーバにHTTP要求を開始することができます.
4、ResttTemplateのhttpに対するパッケージはJdbcTemplateのjdbcに対するパッケージと似ています.本文の環境:Java jdk 8+Spring boot 2.1.3(spring 5.1.5).
構造関数
説明
Rest Template()
デフォルトではorg.springframe ework.http.client.SimpleClinthtt Request Factoryクライアントを使用して、下の階にはjdk標準のAPIを使用しています.java.netパッケージのAPI、java.net.HttpURLConctionなどです.
RestTemplate(ClientHttpRequest Factory request Factory)
ClientHttpRequest Factoryインターフェースの実現クラスは、最下層に実現される第三者HTTPクライアントソフトウェアを提供する.OkHttp 3 Client、及びRibbon Clientなどのようです.
Restt Template(List)message Coverters)
HttpMessage Coverterインターフェースの実現対象は、HTTPメッセージとJava POJOの間でデータ変換が可能である.
5、RestTemplateを使うのはとても簡単で、Spring boot、Spring Coudプロジェクトに対して、spring-boot-starter-webコンポーネントの内部はすでに含まれています. spring-web-x.x.x.RELEASE.jarは、RestTemplateのインスタンスをSpring容器で管理し、必要なところで利用すればいいです.
方法
説明
Reponse Entity get For Entity(URI url,Class reponseType)
要求されたアドレス、レスポンステキスト、応答状態などの情報が含まれています.
Reponse Entity get ForEntity(String url,Class reponse Type,Map uriVarables)
uriVarables:クエリーパラメータの可変値を設定するために、mapのkey値はurlに設定された可変パラメータ値である.
Reponse Entity get ForEntity(String url,ClassレスポンスType,Object…uriVarables)
uriVarables:url経路のパラメータを扱う専用@PathVarable
T get ForObject(URI url,Class reponse Type)
get ForObject方法は、戻り値が直接応答本文であることと違い、応答ヘッダ情報及び応答状態を含まないことである.
T get ForObject(String url,Class reponseType,Map uriVarables)
T get ForObject(String url,Class reponseType,Object…uriVarables)
get ForEntity(URI url,Class reponseType)
方法
説明
ReponseEntity postForEntity(URI url、@Nullable Object request、ClassレスポンスType)
url:請求の住所.request:要求された本文(body)の内容、つまり相手@Request Bodyパラメータの値は、nullとすることができます.ReponseEntityオブジェクトにはhttpレスポンスヘッダ情報、応答本文、応答状態などの情報が含まれています.
ReponseEntity postForEntity(String url、@Nullable Object request、Class reponseType、Map uriVarables)
uriVarables:クエリーパラメータの可変値を設定するために、mapのkey値はurlに設定された可変パラメータ値である.
ReponseEntity postForEntity(String url、@Nullable Object request、Class reponseType、Object...uriVarables)
uriVarables:url経路のパラメータを扱う専用@PathVarable
T postForObject(URI url、@Nullable Object request、Class reponseType)
get ForObject方法は、戻り値が直接応答本文であることと違い、応答ヘッダ情報及び応答状態を含まないことである.
T postForObject(String url、@Nullable Object request、Class reponseType、Map uriVarables)
T postForObject(String url、@Nullable Object request、Class reponseType、Object...uriVarables)
postForEntity(String url、@Nullable Object request、Class reponseType、Map uriVarables)
Rets Templateタイムアウト時間
1、new Relt Template()の場合はデフォルトではSimpleClient HttpRequest Factory工場を使用しています.その下の階にJava原生のHttpURLConnection APIを使ってHttp要求をしています.デフォルトのconnectTimeout=-1(接続タイムアウト)は、readTimeout=-1(読み取りタイムアウト)は制限されていません.
2、明らかに無期限の待つことは許されません.タイムアウト時間を設定しなければなりません.SimpleClintHttpRequest Factory工場を例にします.
Stering body=rect Template.get ForObject("https://ca.youtube.com/「String.class」
OkHttpClientクライアントを切り替えます.
1、ClientHttpRequest Factoryにはいくつかの実現クラスがあり、Khttp 3は現在最も人気のあるhttpクライアントとして、ここではOkHttp Clidentを例にしています.
2、第一歩のプロジェクトにOkHttpClientの依存を導入したら、それ以外は報告されます.java.lang.NoClass DefFoundError:ok http 3/OkHttpClient
3、次はRestTemplateの対象を作成する時、OkHttp 3 ClintHttpRequest Factory工場に伝えばいいです.
4、その他は ApacheのHttpClient、およびNetty、Ribron Clientなどのhttpクライアントは同じです.
Ribbonの負荷バランスは、RestTemplateに
拡張内容は引き続き参照できます.https://blog.csdn.net/f641385712/article/details/100713622
Rest Template Resetテンプレートの概要
Http GET要求
Http Postリクエスト
Rets Templateタイムアウト時間
OkHttpClientクライアントを切り替えます.
Rest Template Resetテンプレートの概要
負荷バランス(@LoadBalanced)を有するRestit Templateは、マイクロサービス名を使用して要求を開始しなければならず、ip:portを使用して負荷均衡(@LoadBalanced)を持たないRestit Templateは、マイクロサービス名を使用して要求を開始することができず、ip:portのみを使用することができる.
1、org.springframe ewark.web.client.Restit Template類はspring-web-x.x.RELEASE.jarパッケージの下でHTTP訪問を行うRESTクライアントコアクラスです.
2、Javaアプリケーションのバックグラウンドコードの中で、他のJavaアプリケーションにHttp要求を開始する場合、通常はApachのHttpClientライブラリを使用します.一方、spring cloudマイクロサービスアーキテクチャでは、各マイクロサービス間で頻繁にhttp要求を開始して通信するので、springはhttp要求をカプセル化して、より便利に利用できるようにする.
3、Rets Template類は、restスタイルの方式で、GET、POST、PUT、DELETE、HEAD、OPTNSなどの異なる方式でサーバにHTTP要求を開始することができます.
4、ResttTemplateのhttpに対するパッケージはJdbcTemplateのjdbcに対するパッケージと似ています.本文の環境:Java jdk 8+Spring boot 2.1.3(spring 5.1.5).
構造関数
説明
Rest Template()
デフォルトではorg.springframe ework.http.client.SimpleClinthtt Request Factoryクライアントを使用して、下の階にはjdk標準のAPIを使用しています.java.netパッケージのAPI、java.net.HttpURLConctionなどです.
RestTemplate(ClientHttpRequest Factory request Factory)
ClientHttpRequest Factoryインターフェースの実現クラスは、最下層に実現される第三者HTTPクライアントソフトウェアを提供する.OkHttp 3 Client、及びRibbon Clientなどのようです.
Restt Template(List)message Coverters)
HttpMessage Coverterインターフェースの実現対象は、HTTPメッセージとJava POJOの間でデータ変換が可能である.
5、RestTemplateを使うのはとても簡単で、Spring boot、Spring Coudプロジェクトに対して、spring-boot-starter-webコンポーネントの内部はすでに含まれています. spring-web-x.x.x.RELEASE.jarは、RestTemplateのインスタンスをSpring容器で管理し、必要なところで利用すればいいです.
// (@SpringBootApplication) , @Configuration
@Bean
public RestTemplate restTemplate() {
// RestTemplate Spring
return new RestTemplate();
}
// RestTemplate Controller ,
@Resource
private RestTemplate restTemplate;
Http GET要求方法
説明
Reponse Entity get For Entity(URI url,Class reponseType)
要求されたアドレス、レスポンステキスト、応答状態などの情報が含まれています.
Reponse Entity get ForEntity(String url,Class reponse Type,Map uriVarables)
uriVarables:クエリーパラメータの可変値を設定するために、mapのkey値はurlに設定された可変パラメータ値である.
Reponse Entity get ForEntity(String url,ClassレスポンスType,Object…uriVarables)
uriVarables:url経路のパラメータを扱う専用@PathVarable
T get ForObject(URI url,Class reponse Type)
get ForObject方法は、戻り値が直接応答本文であることと違い、応答ヘッダ情報及び応答状態を含まないことである.
T get ForObject(String url,Class reponseType,Map uriVarables)
T get ForObject(String url,Class reponseType,Object…uriVarables)
get ForEntity(URI url,Class reponseType)
/**
* http://localhost:8080/getInfo?uid=3030&agencyId=20807
* @param uid
* @param agencyId
* @return
*/
@GetMapping("getInfo")
public String getInfo(@RequestParam String uid, String agencyId) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("code", 200);
jsonObject.put("uid", uid);
jsonObject.put("agencyId", agencyId);
return jsonObject.toString();
}
//
@GetMapping("test1")
public String test1() {
String body = null;
try {
URI uri = new URI("http://localhost:8080/getInfo?uid=3030&agencyId=20807");
ResponseEntity forEntity = restTemplate.getForEntity(uri, String.class);
//http , 200
int statusCodeValue = forEntity.getStatusCodeValue();
//http , , {"uid":"3030","code":200,"agencyId":"20807"}
body = forEntity.getBody();
//http , Content-Type=[text/plain;charset=UTF-8], Content-Length=[44], Date=[Tue, 24 Mar 2020 12:45:43 GMT]}
HttpHeaders headers = forEntity.getHeaders();
System.out.println("headers=" + headers + "
statusCodeValue=" + statusCodeValue + "
body=" + body);
} catch (URISyntaxException e) {
e.printStackTrace();
}
return body;
}
get ForEntity(String url,Class reponseType,Object...uriVarables) /**
*
* http://localhost:8080/getData
* @param uid
* @param agencyId
* @return
*/
@GetMapping("getData/{agencyId}/{uid}")
public List
//
@GetMapping("test2")
public List> test2() {
String uri = "http://localhost:8080/getData/{agency_id}/{u_id}?info= ";
// List
ResponseEntity forEntity = restTemplate.getForEntity(uri, List.class, 20792, "999UP000");
//http , 200
int statusCodeValue = forEntity.getStatusCodeValue();
//http , , {"uid":"3030","code":200,"agencyId":"20807"}
List> body = forEntity.getBody();
//http , Content-Type=[text/plain;charset=UTF-8], Content-Length=[44], Date=[Tue, 24 Mar 2020 12:45:43 GMT]}
HttpHeaders headers = forEntity.getHeaders();
System.out.println("headers=" + headers + "
statusCodeValue=" + statusCodeValue + "
body=" + body);
return body;
}
get ForObject(String url,Class reponseType,Map uriVarables)/**
*
* http://localhost:8080/getMessage
*
* @param uid
* @param agencyId
* @return
*/
@GetMapping("getMessage")
public JSONObject getMessage(String uid, String agencyId) {
List> dataMapList = new ArrayList<>(8);
Map map = new HashMap<>(8);
JSONObject jsonObject = new JSONObject();
jsonObject.put("code", 200);
jsonObject.put("uid", uid);
jsonObject.put("agencyId", agencyId);
return jsonObject;
}
//
@GetMapping("test3")
public JSONObject test3() {
String uri = "http://localhost:8080/getMessage?uid={uid}&agencyId={agency_id}";
Map paramMap = new HashMap<>(4);
paramMap.put("uid", "9998UYT9");
paramMap.put("agency_id", 20802);
//getForObject JSONObject , .
JSONObject body = restTemplate.getForObject(uri, JSONObject.class, paramMap);
System.out.println(body);
return body;
}
Http Postリクエスト方法
説明
ReponseEntity postForEntity(URI url、@Nullable Object request、ClassレスポンスType)
url:請求の住所.request:要求された本文(body)の内容、つまり相手@Request Bodyパラメータの値は、nullとすることができます.ReponseEntityオブジェクトにはhttpレスポンスヘッダ情報、応答本文、応答状態などの情報が含まれています.
ReponseEntity postForEntity(String url、@Nullable Object request、Class reponseType、Map uriVarables)
uriVarables:クエリーパラメータの可変値を設定するために、mapのkey値はurlに設定された可変パラメータ値である.
ReponseEntity postForEntity(String url、@Nullable Object request、Class reponseType、Object...uriVarables)
uriVarables:url経路のパラメータを扱う専用@PathVarable
T postForObject(URI url、@Nullable Object request、Class reponseType)
get ForObject方法は、戻り値が直接応答本文であることと違い、応答ヘッダ情報及び応答状態を含まないことである.
T postForObject(String url、@Nullable Object request、Class reponseType、Map uriVarables)
T postForObject(String url、@Nullable Object request、Class reponseType、Object...uriVarables)
postForEntity(String url、@Nullable Object request、Class reponseType、Map uriVarables)
/**
* http://localhost:8080/postInfo?uid=44KKP990&agencyId=208071
*
* @param uid
* @param agencyId
* @return
*/
@PostMapping("postInfo")
public JSONObject postInfo(@RequestParam String uid, String agencyId) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("code", 200);
jsonObject.put("uid", uid);
jsonObject.put("agencyId", agencyId);
return jsonObject;
}
//
@GetMapping("test11")
public JSONObject test11() {
JSONObject body = null;
String uri = "http://localhost:8080/postInfo?uid={uid}&agencyId=208071";
Map paramMap = new HashMap<>(4);
paramMap.put("uid", "8899HG9");
ResponseEntity forEntity = restTemplate.postForEntity(uri, null, JSONObject.class, paramMap);
//http , 200
int statusCodeValue = forEntity.getStatusCodeValue();
//http , , {"uid":"3030","code":200,"agencyId":"20807"}
body = forEntity.getBody();
//http , Content-Type=[text/plain;charset=UTF-8], Content-Length=[44], Date=[Tue, 24 Mar 2020 12:45:43 GMT]}
HttpHeaders headers = forEntity.getHeaders();
System.out.println("headers=" + headers + "
statusCodeValue=" + statusCodeValue + "
body=" + body);
return body;
}
postForObject(String url、@Nullable Object request、Class reponseType、Object...uriVarables)/**
*
* http://localhost:8080/postData/{agencyId}
*/
@PostMapping("postData/{agencyId}")
public List> postData(@PathVariable String agencyId, @RequestBody List ids) {
List> dataMapList = new ArrayList<>(8);
Map map = new HashMap<>(8);
map.put("code", 200);
map.put("uid", ids.toArray());
map.put("agencyId", agencyId);
dataMapList.add(map);
return dataMapList;
}
//
@GetMapping("test22")
public List> test22() {
String uri = "http://localhost:8080/postData/{agencyId}";
List ids = new ArrayList<>(4);
ids.add("3000L");
ids.add("99UH7");
ids.add("99JHG");
// List
List> body = restTemplate.postForObject(uri, ids, List.class, 20792);
return body;
}
//その他の操作は同じです.Rets Templateタイムアウト時間
1、new Relt Template()の場合はデフォルトではSimpleClient HttpRequest Factory工場を使用しています.その下の階にJava原生のHttpURLConnection APIを使ってHttp要求をしています.デフォルトのconnectTimeout=-1(接続タイムアウト)は、readTimeout=-1(読み取りタイムアウト)は制限されていません.
2、明らかに無期限の待つことは許されません.タイムアウト時間を設定しなければなりません.SimpleClintHttpRequest Factory工場を例にします.
// http , RestTemplate Spring
@Bean
public RestTemplate restTemplate() {
// http 30 , 120
// , , , , , 。
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(30 * 1000);
requestFactory.setReadTimeout(120 * 1000);
return new RestTemplate(requestFactory);
}
3、検証はとても簡単で、youtubeにお願いします.接続できなくてタイムアウトします.そして異常を投げます. java.net.SocketTimeout Exception:Read timed outStering body=rect Template.get ForObject("https://ca.youtube.com/「String.class」
OkHttpClientクライアントを切り替えます.
1、ClientHttpRequest Factoryにはいくつかの実現クラスがあり、Khttp 3は現在最も人気のあるhttpクライアントとして、ここではOkHttp Clidentを例にしています.
2、第一歩のプロジェクトにOkHttpClientの依存を導入したら、それ以外は報告されます.java.lang.NoClass DefFoundError:ok http 3/OkHttpClient
com.squareup.okhttp3
okhttp
3.14.5
バージョンは勝手に引くことができません.org.springframewark.http.client.OkHttp 3 ClintHttpRequest Factory類のソースコードの上には通常、対応するOkHttpバージョンが提示されています.本文のspring-web-5.7.RELEASE.jarで提示されたOkHttpバージョンは3.Xで、4.4 Xを導入すれば起動できません.3、次はRestTemplateの対象を作成する時、OkHttp 3 ClintHttpRequest Factory工場に伝えばいいです.
// http , RestTemplate Spring
@Bean
public RestTemplate restTemplate() {
// http 30 , 120
OkHttp3ClientHttpRequestFactory okRequestFactory = new OkHttp3ClientHttpRequestFactory();
okRequestFactory.setConnectTimeout(30 * 1000);
okRequestFactory.setReadTimeout(120 * 1000);
return new RestTemplate(okRequestFactory);
}
下の階で何を使っているのか確認するのも簡単です.youtubeにお願いします.https://ca.youtube.com)超常時制御層を接続すると印刷が異常になります. okhttp 3.internal.xxxxのエラー情報.4、その他は ApacheのHttpClient、およびNetty、Ribron Clientなどのhttpクライアントは同じです.
Ribbonの負荷バランスは、RestTemplateに
@LoadBalanced
を加え、Netflix Ribronの負荷バランスを参照することができます.拡張内容は引き続き参照できます.https://blog.csdn.net/f641385712/article/details/100713622