Spring RestTemplate 기본 사용 안내
8339 단어 SpringRestTemplate
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
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());
}
postForEntitypost 방식 으로 전달 요청 파 라미 터 를 제출 하면 다음 과 같이 사용 할 수 있 습 니 다.
서버:@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 방법 을 사용 해 야 합 니 다.특정한 것 은 다음 과 같 습 니 다.
/**
*
* @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 사용 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.