Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- uncheck Exception
- REST API 규칙
- 1차캐시
- jpa에러
- Spring Spring boot 차이
- 인텔리제이
- github
- jwt메서드
- @IdClass
- Filter
- JPA
- 스프링 부트 기능
- 스프링 부트 공식 문서
- JoinColumn
- json
- JPA주의사항
- Q 클래스
- Unsatisfied dependency
- spring서버
- ERD 작성
- jpa회원가입
- git
- 스프링부트오류
- 빈생성안됨
- json gson 차이
- Error creating bean with name
- 최종 프로젝트
- 복합키
- queryDSL
- REST란
Archives
- Today
- Total
Everyday Dev System
RestTemplate - Post 방식 : Client, Server 코드 설명 본문
PathVariable 방식 & QueryParam 방식
더보기
PathVariable 방식
위와 같이 expand(query)를 입력하면 query라는 변수가 path에 {query}부분에 들어가서 요청을 보낸다.
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:7071")
.path("/api/server/post-call/{query}")
.encode()
.build()
.expand(query)
.toUri();
서버 프로젝트의 controller 부분
@PostMapping("/post-call/{query}")
public Item postCall(@PathVariable String query, @RequestBody UserRequestDto requestDto) {
return itemService.postCall(query, requestDto);
}
QueryParam 방식
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:7071")
.path("/api/server/get-call-obj")
.queryParam("query", query)
.encode()
.build()
.toUri();
서버 프로젝트의 controller 부분
@GetMapping("/get-call-obj")
public Item getCallObject(@RequestParam String query) {
return itemService.getCallObject(query);
}
Client service 전체 코드
더보기
package com.sparta.springresttemplateclient1.service;
import com.sparta.springresttemplateclient1.dto.ItemDto;
import com.sparta.springresttemplateclient1.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Service
public class RestTemplateService {
private final RestTemplate restTemplate;
public RestTemplateService(RestTemplateBuilder builder) {
this.restTemplate = builder.build();
}
// String query에 맞는 데이터의 ItemDto 타입 반환하기
public ItemDto getCallObject(String query) {
// 요청 URL 만들기
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:7071")
.path("/api/server/get-call-obj")
.queryParam("query", query)
.encode()
.build()
.toUri();
log.info("uri = " + uri);
ResponseEntity<ItemDto> responseEntity = restTemplate.getForEntity(uri, ItemDto.class);
log.info("statusCode = " + responseEntity.getStatusCode());
return responseEntity.getBody();
}
// 다 가져오기
public List<ItemDto> getCallList() {
// 요청 URL 만들기
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:7071")
.path("/api/server/get-call-list")
.encode()
.build()
.toUri();
log.info("uri = " + uri);
ResponseEntity<String> responseEntity = restTemplate.getForEntity(uri, String.class);
// Json 형태가 복합적이므로 하나의 클래스로 받을 수 없으므로 String으로 받은 후에 Json으로 다시 변환할거임.
log.info("statusCode = " + responseEntity.getStatusCode());
log.info("Body = " + responseEntity.getBody());
return fromJSONtoItems(responseEntity.getBody());
}
public ItemDto postCall(String query) {
// 요청 URL 만들기
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:7071")
.path("/api/server/post-call/{query}")
.encode()
.build()
.expand(query)
.toUri();
log.info("uri = " + uri);
User user = new User("Robbie", "1234");
ResponseEntity<ItemDto> responseEntity = restTemplate.postForEntity(uri, user, ItemDto.class);
// 두번째 파라미터에는 http body 에 넣어줄 데이터를 넣어야 함.
log.info("statusCode = " + responseEntity.getStatusCode());
return responseEntity.getBody();
}
public List<ItemDto> exchangeCall(String token) {
return null;
}
/* {
"items":
[
{"title":"Mac","price":3888000},
{"title":"iPad","price":1230000},
{"title":"iPhone","price":1550000},
{"title":"Watch","price":450000},
{"title":"AirPods","price":350000}
]
}*/
public List<ItemDto> fromJSONtoItems(String responseEntity) {
JSONObject jsonObject = new JSONObject(responseEntity);
JSONArray items = jsonObject.getJSONArray("items");
List<ItemDto> itemDtoList = new ArrayList<>();
for (Object item : items) {
ItemDto itemDto = new ItemDto((JSONObject) item);
itemDtoList.add(itemDto);
}
return itemDtoList;
}
}
Client service 코드 발췌
public ItemDto postCall(String query) {
// 요청 URL 만들기
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:7071")
.path("/api/server/post-call/{query}")
.encode()
.build()
.expand(query)
.toUri();
log.info("uri = " + uri);
User user = new User("Robbie", "1234");
ResponseEntity<ItemDto> responseEntity = restTemplate.postForEntity(uri, user, ItemDto.class);
log.info("statusCode = " + responseEntity.getStatusCode());
return responseEntity.getBody();
}
1. URI 생성 및 요청
.path("/api/server/post-call/{query}")
.encode()
.build()
.expand(query)
위와 같이 expand(query)를 입력하면 query라는 변수가 path에 {query}부분에 들어가서 요청을 보낸다.
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:7071")
.path("/api/server/post-call/{query}")
.encode()
.build()
.expand(query)
.toUri();
restTemplate.postForEntity(uri, 요청시 전달할 데이터, 반환 타입)
클래스 타입을 넣어서 보내도 restTemplate이 자동으로 json 형태로 변환을 해준다.
ResponseEntity<ItemDto> responseEntity = restTemplate.postForEntity(uri, user, ItemDto.class);
// 두번째 파라미터에는 http body 에 넣어줄 데이터를 넣어야 함.
Server project
Service 코드 전체보기
더보기
package com.sparta.springresttemplateserver.service;
import com.sparta.springresttemplateserver.dto.ItemResponseDto;
import com.sparta.springresttemplateserver.dto.UserRequestDto;
import com.sparta.springresttemplateserver.entity.Item;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
@Service
public class ItemService {
private final List<Item> itemList = Arrays.asList(
new Item("Mac", 3_888_000),
new Item("iPad", 1_230_000),
new Item("iPhone", 1_550_000),
new Item("Watch", 450_000),
new Item("AirPods", 350_000)
);
public Item getCallObject(String query) {
for (Item item : itemList) {
if(item.getTitle().equals(query)) {
return item;
}
}
return null;
}
public ItemResponseDto getCallList() {
ItemResponseDto responseDto = new ItemResponseDto();
for (Item item : itemList) {
responseDto.setItems(item);
}
return responseDto;
}
public Item postCall(String query, UserRequestDto userRequestDto) {
System.out.println("userRequestDto.getUsername() = " + userRequestDto.getUsername());
System.out.println("userRequestDto.getPassword() = " + userRequestDto.getPassword());
return getCallObject(query);
}
public ItemResponseDto exchangeCall(String token, UserRequestDto requestDto) {
return null;
}
}
public Item postCall(String query, UserRequestDto userRequestDto) {
System.out.println("userRequestDto.getUsername() = " + userRequestDto.getUsername());
System.out.println("userRequestDto.getPassword() = " + userRequestDto.getPassword());
return getCallObject(query);
}
결과:
postman
client server
server
'내배캠 주요 학습 > Spring 숙련' 카테고리의 다른 글
Entity 연관관계 (0) | 2023.06.20 |
---|---|
Client 서버에서 네이버 검색 API 활용 (0) | 2023.06.20 |
RestTemplate - get방식 : Server 코드 설명 (0) | 2023.06.20 |
RestTemplate - get방식 : Client 서버 코드 설명 (0) | 2023.06.20 |
Validation, 회원가입 데이터에 적용하기 (0) | 2023.06.20 |