Spring RestTemplate 기본 사용 안내

8339 단어 SpringRestTemplate
전편 파일 에서 Eureka 서 비 스 를 소개 하 는 글 에서 저 희 는 consumer 가 Eureka 에서 LoadBalancer Client 를 통 해 서버 주소 정 보 를 얻 은 후에 RestTemplate 를 통 해 원 격 으로 서 비 스 를 호출 하 는 장면 을 소개 합 니 다.본 고 는 RestTemplate 의 사용 을 구체 적 으로 소개 합 니 다.
RestTemplate
  SpringRestTemplate 는 Spring 이 제공 하 는 Rest 서 비 스 를 방문 하 는 고객 측 입 니 다.RestTemplate 는 원 격 Http 서 비 스 를 편리 하 게 방문 하 는 여러 가지 방법 을 제공 하여 클 라 이언 트 의 작성 효율 을 크게 향상 시 킬 수 있 습 니 다.그래서 많은 클 라 이언 트,예 를 들 어 Android 나 제3자 서비스 업 체 들 이 RestTemplate 를 사용 하여 restful 서 비 스 를 요청 합 니 다.
1.환경 구축
  RestTemplate 의 사용 을 보 여주 기 위해 저 희 는 두 개의 SpringBoot 프로젝트 를 만 들 었 습 니 다.하 나 는 provider 를 server 엔 드 로 하고 하 나 는 consumer 를 서비스 호출 방법 으로 합 니 다.

2.API 방법 소개
API
설명 하 다.
getForEntity()
HTTP GET 요청 을 보 냅 니 다.되 돌아 오 는 ResponseEntity 는 응답 체 가 매 핑 한 대상 을 포함 합 니 다.
getForObject()
HTTP GET 요청 을 보 내 면 되 돌아 오 는 요청 체 가 대상 으로 매 핑 됩 니 다.
postForEntity()
POST 데 이 터 를 하나의 URL 로 되 돌려 주 고 대상 을 포함 하 는 ResponseEntity 를 되 돌려 줍 니 다.이 대상 은 응답 체 에서 매 핑 됩 니 다.
postForObject()
POST 데 이 터 를 URL 로 가 져 와 응답 체 일치 에 따라 생 성 된 대상 을 되 돌려 줍 니 다.
headForHeaders()
HTTP HEAD 요청 을 보 내 특정 자원 URL 을 포함 하 는 HTTP 헤드 를 되 돌려 줍 니 다.
optionsForAllow()
HTTP OPTIONS 요청 을 보 내 특정 URL 에 대한 Allow 헤더 정 보 를 되 돌려 줍 니 다.
postForLocation()
POST 데 이 터 를 URL 로 가 져 와 새로 만 든 자원 의 URL 을 되 돌려 줍 니 다.
put()
PUT 자원 을 특정 URL 로
delete()
특정 URL 에서 자원 에 대해 HTTP DELETE 작업 을 수행 합 니 다.
exchange()
URL 에서 특정 HTTP 방법 을 실행 하고 대상 을 포함 하 는 ResponseEntity 를 되 돌려 줍 니 다.이 대상 은 응답 체 에서 매 핑 됩 니 다.
execute()
URL 에서 특정 HTTP 방법 을 실행 하고 응답 체 맵 에서 얻 은 대상 을 되 돌려 줍 니 다.
3.구체 적 으로 사용
  우 리 는 자주 사용 하 는 http 프로 토 콜 의 네 가지 요청 방식 을 통 해 효 과 를 볼 수 있 습 니 다.
3.1 무 참 요청
  우선 서버 요청 방법 을 살 펴 보 겠 습 니 다.인 자 를 받 을 필요 가 없습니다.
getForEntity
getForEntity 를 통 해 이 루어 집 니 다.
서버

 /**
 *   ,     
 * @return
 */
 @GetMapping("/server1")
 public String server1String(){
  System.out.println("       ...");
  return "success";
 }
호출

/**
 * RestTemplate    provider       server1
 */
@Test
public void contextLoads() {
 String url = "http://localhost:8080/server1";
 RestTemplate restTemplate = new RestTemplate();
 ResponseEntity<String> entity = restTemplate.getForEntity(url, String.class);
 //        
 HttpStatus statusCode = entity.getStatusCode();
 //      header  
 HttpHeaders headers = entity.getHeaders();
 //      body  
 String msg = entity.getBody();
 System.out.println(statusCode);
 System.out.println(headers);
 System.out.println(msg);
}
출력 결과

설명:
1.getForEntity()방법 으로 되 돌아 오 는 유형 은 ResponseEntity이 고 ResponseEntity는 Spring 이 HTTP 요청 에 응답 하 는 패키지 입 니 다.응답 코드,contentType,contentLength,응답 메시지 등 몇 가지 중요 한 요 소 를 포함 합 니 다.출력 결과 에서 볼 수 있 습 니 다.
2.getForEntity()의 매개 변수 중 첫 번 째 는 요청 주소 이 고 두 번 째 는 T 에 대응 하 는 유형 입 니 다.
getForObject
  getForObject 함 수 는 실제 getForEntity 함수 에 대한 추가 패키지 입 니 다.되 돌아 오 는 메시지 체 의 내용 에 만 관심 을 가지 고 다른 정보 에 관심 이 없다 면 getForObject 를 사용 할 수 있 습 니 다.

/**
 * getForObject   
 */
@Test
public void contextLoadsObject() {
 String url = "http://localhost:8080/server1";
 RestTemplate restTemplate = new RestTemplate();
 //               ,                
 String msg = restTemplate.getForObject(url,String.class);
 System.out.println(msg);
}
3.2 참여 요청
서버 방법 은 호출 자가 전달 하 는 인 자 를 받 아야 합 니 다.

/**
 *   ,            
 * @return
 */
 @RequestMapping("/server2")
 public String server2String(Integer id,String userName){
  System.out.println("       ..."+id+" "+userName);
  return "success--     ";
 }

 /**
 *   ,            
 * @return
 */
 @RequestMapping("/server3")
 public String server3String(User user){
  System.out.println("       ..."+user);
  return "success--     ";
 }
getForEntity
호출 자 는 두 가지 방식 으로 호출 할 수 있다.
첫 번 째 방식 은 숫자 자리 표시 자 를 통 해 마지막 으로 가 변 길이 의 매개 변 수 를 통 해 앞의 자리 표시 자 를 일일이 교체 합 니 다.

/**
*           
*        
*/
@Test
public void testServer2(){
	//         
 String url = "http://localhost:8080/server2?id={1}&userName={2}";
 RestTemplate restTemplate = new RestTemplate();
 ResponseEntity<String> entity = restTemplate.getForEntity(url, String.class,5,"bobo");
 System.out.println(entity.getBody());
}
두 번 째 는 name={name}을 사용 하 는 형식 입 니 다.마지막 매개 변 수 는 map 입 니 다.map 의 key 는 바로 앞 자리 차지 문자 의 이름 이 고 map 의 value 는 매개 변수 값 입 니 다.

/**
 *           
 *        
 */
@Test
public void testServer3(){
 String url = "http://localhost:8080/server2?id={id}&userName={userName}";
 Map<String,Object> map = new HashMap<>();
 map.put("id",6);
 map.put("userName","    ");
 RestTemplate restTemplate = new RestTemplate();
 ResponseEntity<String> entity = restTemplate.getForEntity(url, String.class,map);
 System.out.println(entity.getBody());
}
postForEntity
  post 방식 으로 전달 요청 파 라미 터 를 제출 하면 다음 과 같이 사용 할 수 있 습 니 다.
서버:@RequestBody 주 해 를 추가 해 야 합 니 다.

/**
 *   ,            
 * @return
 */
@RequestMapping("/server3")
public String server3String(@RequestBody User user){
 System.out.println("       ..."+user);
 return "success--     ";
}
클 라 이언 트

/**
 * postForEntity(url,user,String.class)
 * url:    
 * user:       
 * String.class          
 */
@Test
public void contextLoadsObject1() {
 String url = "http://localhost:8080/server3";
 RestTemplate restTemplate = new RestTemplate();
 User user = new User(1,"bobo","  ");
 //               ,                
 String msg = restTemplate.postForEntity(url,user,String.class).getBody();
 System.out.println(msg);
}
3.3 자기 유형 으로 돌아 가기
서버 에서 사용자 정의 형식의 데 이 터 를 되 돌려 줍 니 다.

 /**
 *        
 * @return
 */
 @RequestMapping("/server4")
 public User server4Object(){
  System.out.println("       ...");
  return new User(2,"  ","  ");
 }
클 라 이언 트:

/**
 *           
 */
@Test
public void testServer5(){
 String url = "http://localhost:8080/server4";
 RestTemplate restTemplate = new RestTemplate();
 ResponseEntity<User> entity = restTemplate.getForEntity(url, User.class);
 System.out.println(entity.getBody());
}
getForEntity 와 getForObject 및 post ForEntity 와 post ForObject 를 사용 하 는 것 은 차이 가 많 지 않 으 므 로 받 는 유형 에 주의 하면 됩 니 다.
3.4 돌아 오 는 list 의 범 형 장면
여기 서 우 리 는 exchange 방법 을 사용 해 야 합 니 다.특정한 것 은 다음 과 같 습 니 다.
  • 호출 자가 HTTP 요청 방법(GET,POST,PUT 등)을 지정 할 수 있 도록 합 니 다
  • 요청 에 body 와 헤더 정 보 를 추가 할 수 있 습 니 다.그 내용 은'HttpEntity
  • exchange 는'인자 가 함 유 된 유형'(즉,범 형 류)을 반환 형식 으로 지원 합 니 다.이 특성 은'Parameterized TypeReferenceresponseType'설명 을 통 해
  • 클 라 이언 트 호출
    
    /**
     *         
     * @return
     */
    @RequestMapping("/server5")
    public List<User> server5List(){
     System.out.println("       ...");
     return Arrays.asList(new User(2,"  1","  ")
          ,new User(3,"  2","  ")
          ,new User(4,"  3","  "));
    }

    자~RestTemplate 의 기본 사용 은 여기까지 소개 하 겠 습 니 다.더 많은 Spring RestTemplate 사용 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기