기본 개념
Spring RestTemplate는 Spring이 REST 서비스에 액세스하기 위해 제공하는 클라이언트입니다. RestTemplate은 원격 HTTP 서비스에 대한 다양한 편리한 액세스를 제공하여 고객의 쓰기 효율성을 크게 향상시킬 수 있습니다. 따라서 Android 또는 타사 서비스 제공 업체와 같은 많은 고객은 ResttemPlate를 사용하여 RESTFul 서비스를 요청합니다.
Spring-Web의 resttemplata는 Java의 기본 HTTP를 캡슐화 한 것입니다. resttemplata를 사용하는 사용자는 더 이상 기본 연결 설정에주의를 기울일 수 없습니다. resttemplata는 REST 사양을 지원할뿐만 아니라 리턴 값 객체 유형을 정의합니다.
사용 중에는 RestTemplate 객체를 직접 새롭게 할 수 있습니다. 우리가 만든 resttemplate 객체에서 메시지를 반환하는 메시지 변환기가 있습니다. 반환 된 데이터의 MediaType를 기반으로 해당 변환기를 찾고 MediaType 변환을 수행 할 수 있습니다. 또한 메시지 변환기를 직접 작성하거나 AbstractGenerichttpMessageConverter <T> 클래스를 상속하는 클래스를 만들거나 httpMessageConverter <T> 인터페이스를 구현할 수 있습니다. Canread 메소드와 Canwrite 메소드는 스스로 판단하고 Writ
resttemplate 객체는 java.net 패키지에서 구현을 사용하여 하단에 HTTP 요청을 만듭니다. ClientHttPrequestFactory를 사용하여 다른 HTTP 요청 방법을 지정할 수 있습니다.
ClientHttPrequestFactory 인터페이스는 주로 두 가지 구현 방법을 제공합니다.
resttemplate은 기본적으로 simpleclienthttprequestfactory를 사용하고 내부적으로 httpconnection을 호출하여 JDK를 호출합니다. 기본 시간 초과는 -1입니다. 우리는 시간 초과를 스스로 정의 할 수 있습니다.
simpleclienthttprequestfactory factory = new simplecleienthttprequestfactory (); // 연결 시간 초과 설정, 단위 밀리 초 팩토리 .setConnectTimeout (5000); resttemplate resttemplate = 새로운 resttemplate (공장);
GET 요청 사용 :
문자열 URL = "http : // localhost : 80/mandy/login.json? account = 123456 & password = 123456"; result res = resttemplate.getForObject (url, result.class);
RestTemplate 소스 코드 :
@override public <t> t getForObject (String URL, Class <T> responseType, Object ... urlVariables) restclientException {requestCallback requestCallback = AccepTheaderRequestCallback (responseType); httpmessageconverextractor <t> responsextractor = new httpmessageconverextractor <t> (responseetype, getMessageConverters (), logger); return execute (url, httpmethod.get, requestCallback, responsextractor, urlvariables); }GET 요청을 사용하여 매개 변수를 주소로 직접 스플라이킹하는 것이 가장 좋습니다. 왜 그런지 모르겠습니다. 세 번째 매개 변수를 사용하는 경우 다중 자료 유형조차 작동하지 않습니다 (일부 사람들은 Multivaluemap 유형을 사용하는 것이 정상이지만 시도했지만 작동하지 않습니다).
사후 요청 사용 :
Hashmap <String, Object> Map = New Hashmap <String, Object> (); map.put ( "이름", "테스트"); map.put ( "계정", "QWER"); map.put ( "비밀번호", "QWER"); ObjectMapper Mapper = 새로운 ObjectMapper (); 문자열 JSONST = NULL; try {jsonstal = mapper.writevalueasstring (map); } catch (예외 e) {e.printstacktrace (); } // http 헤더 엔티티를 만들고 데이터 형식 httpheaders httpheaders = new httpheaders ()와 같은 헤더 정보를 작성합니다. httpheaders.setContentType (mediaType.application_json_utf8); // http 엔티티를 만들면 생성자를 직접 사용하여 요청 본문과 요청 헤더를 httpentity <string>에 넣을 수 있습니다. "http : // localhost : 80/mandy/user_enable.json"; // rest2 = resttemplate.postforObject (url, httpentity, result.class);RestTemplate 소스 코드 :
@override public <t> t PostForObject (문자열 URL, 객체 요청, 클래스 <t> responseType, Object ... Urivariableble) restclientException {requestCallback requestCallback = httpentityCallback (request, responseType); httpmessageconverextractor <t> responsextractor = new httpmessageconverextractor <t> (responseetype, getMessageConverters (), logger); return execute (url, httpmethod.post, requestCallback, responsextractor, urivariables); }PUT 요청 사용 :
Hashmap <String, object> map = new Hashmap <string, object> (); map.put ( "user_id", "1"); map.put ( "enable", 0); 객체 mapper mapper = new ObjectMapper (); string jsonst = null; try {jsonstem = mapper.writevalueAsstring (map); e.printstacktrace ();} // HTTP 헤더 엔티티를 작성하고 데이터 형식 httpheaders httpheaders와 같은 헤더 정보를 작성하고 새로운 httpheaders (); httpheaders.setcontenttype (mediaType.application_json_utf8) (mediaType.application_json_utf8); httpentity <string> httpentity = new httpentity <string> (jsonst, httpheaders); 문자열 URL = "http : // localhost : 80/mandy/user_enable.json"; resttemplate.put (url, httpentity);RestTemplate 소스 코드 :
@override public void put (문자열 URL, 객체 요청, 객체 ... urlvariables) restclientException {requestCallback requestCallback = httpentityCallback (request); execute (url, httpmethod.put, requestCallback, null, urlvariables); }이 방법의 작은 단점은 요청 결과의 반환 값이 없다는 것입니다. 반환 값을 사용해야하는 경우이 메소드를 사용할 수 없습니다.
삭제 유형 요청을 사용하려면 RestTemplate의 PUT 메소드의 매개 변수 열에 다음 유형 만 있습니다.
@OverRidePublic void Delete (String URL, Object ... UrlVariable)는 RestClientException {execute (url, httpmethod.delete, null, null, urlvariables);}@reveridepublic void delete (string url, map <string,?> urlvariables) restclientecte restcute (url excute) (url) httpmethod.delete, null, null, urlvariables);}@reveridepublic void delete (uri url)는 restclientException {execute (url, httpmethod.delete, null, null)를 던집니다.이 방법은 우리에게 매개 변수를 제공하지 않고 요청 본문 내용을 넣으므로 RestTemPlate에서 제공 한 삭제 방법을 직접 사용하려면 인터페이스가 RESTFul Style을 사용하고 주소에 매개 변수를 넣고 @PathVariable (value = "") 주석을 통해 매개 변수를 얻어야합니다.
핵심 사항 : 실제로, 우리는 다음과 같이 resttemplate의 교환 방법을 직접 사용할 수 있습니다.
@OverRidePublic <T> responseNtity <T> Exchange (String URL, httpMethod 메소드, httpentity <?> requestentity, class <t> responseType, object ... urivariables) restclientException {requestCallback requestCallback = httPentityCallback (requestEnty, responseTyp); ResponseExtractor <ResponseNtity <T >> ResponseExtractor = ResponseNtityExtractor (ResponseType); return execute (url, method, requestcallback, responsextractor, urivariables);}여기서는 하나의 방법 만 나열합니다. 다른 것들은 소스 코드에서 찾을 수 있습니다. 이 방법은 모든 유형의 요청을 만들 수 있습니다.
이 방법에서, 메소드 파라미터는 httpmethod 열거를 통해 얻을 수있다. requestentity 매개 변수는 요청 본문 및 요청 헤더를 포함하여 자체적으로 캡슐화 된 httpentity 엔티티입니다. ResponseType 매개 변수는 결과를 반환하는 매핑 클래스입니다. urivariables 매개 변수는 그것이 쓸모가 없다는 인상을줍니다 (개인적인 의견). 요청 반환 인터페이스에 대한 액세스는 메소드 리턴 값의 getbody () 메소드를 통해 얻을 수 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.