실습을 진행할것이지만 앞으로 매개변수를 넘겨받는 방법에 대해 실습을 통해 알아보고 앞으로 어떻게 적용할지를
위해서 하루는 따로 정리해서 매개변수를 넘겨받는 방법에 대해 공부하려고한다.
/test 방식이 아닌 /test/{id} 등으로 URI의 경로로 넘어오는 값을 변수로 받을수있다.
@GetMapping("/{id}")
public String testControllerWithPathVariables(@PathVariable(required = false) int id) {
return "Hello wolrd!! ID = " + id;
}
를 입력하고, 포스트맨으로 실행해보자
한글이 깨지고 오류가 발생했다.
여기서 해결하자
스프링부트 한글오류
스프링부트 공부하는 도중 한글을 파라미터로 넘겼을때 한글이 깨지는 현상이 일어났다. 해결해보자 .아마도 스프링부트의 UTF가 설정이 안되어있는것이다. 일반적인 스프링웹에서는 톰캣쪽 서
uno-kim.tistory.com
효과는 확실했다.
이뜻은 @겟패밍("/{id}") 의 매개변수 /{id} 는 경로로 들어오는 임의의 숫자 또는 문자를 변수 id에 매핑하라는 뜻이다.
다음방법은 리퀘스틑 파람이다.
@GetMapping("/testRequestParam")
public String testControllerRequestParam(@RequestParam(required = false) String id) {
return "Hello wolrd!! ID = " + id + "하위~~!!";
}
localhost:8080/test/testRequestParam?id=김은호
localhost:8080/test/testRequestParam?(변수이름)=(넘길 값) 이렇게 사용된다.
@RequestBody
@리퀘스트 바디를 사용하는 방법도 있다.
보통 반환하고자 하는 리소스가 복잡할 때 사용한다. 예를 들어 String 이나 int같은 기본 자료형이 아니라 오브젝트
처럼 복잡한 자료형을 통째로 요청에 보내고 싶은 경우가 이에 해당한다!!
그럼 실습을 위해 해당값을 받아줄 DTO를 만들어주자.
package com.unoSpringBoot.study.DTO;
import lombok.Data;
@Data
public class TestRequestBodyDTO {
private int id;
private String name;
}
내용은 이렇고 DTO는 이렇다. 그냥 간단하게 만들기위해서 이름을 막지었다. TestRequestBodyDTO
그리고 요청 바디로 받는 메서드를 만들어보자!
@GetMapping("/testRequestBody")
public String testControllerRequestBody(@RequestBody
TestRequestBodyDTO testRequestBodyDTO) {
return "Hello Wolrd!!!! name " + testRequestBodyDTO.getName()
+ " 그리고 나이는 " + testRequestBodyDTO.getAge();
}
길어서 중간에 한번 끊은거다.
그리고 포스트맨을 통해 해당 URI로 확인해보자
띠용? 오류가뜬다. 나쁜 리퀘스트... 나쁘댄다...
그러나 걱정하지말자 우리가 나쁜거지 코드가 나쁜게 아니었다.
바디를 누르고, 러우에 제이슨형태로 하고
{
"age" : 24,
"name" : "김은호"
}
를 복붙해준뒤 센드해주면 나온다. 굿굿
리퀘스트 바디도 받았겠다. 그럼 출력하는것도 오브젝트로 가능?!
당연가능하다..
@ResponseBody
그냥 오브젝트를 리턴하는 방법이다.
해당 값들을 출력할 ResponseDTO를 만들어보자
이친구는 ResponseDTO를 리턴하는 컨트롤러를 구현해 보도록하자. 저저번 실습때 만들었다.
@GetMapping("/testResponseBody")
public ResponseDTO<String> testControllerResponsBody() {
List<String> list = new ArrayList<String>();
list.add("하위~~~~ 내이름은 ");
ResponseDTO<String> response = ResponseDTO.<String>builder().data(list).build();
return response;
}
컴파일한 후 localhost:8080/test/testResponseBody를 실행시켜보자
문제없이 나온다.
마지막으로 ResponseEntity에 대해 알아보자....
우리가 작성할 컨트롤러는 모두 ResponseEntity를 반환할 예정이다. ResponseEntity는 HTTP 응답의 바디뿐만아니라
여러 다른 매개변수들, 예를 들어 status나 header를 조작하고 싶을 때 사용한다.
@GetMapping("/testResponseEntity")
public ResponseEntity<?> testControllerResponseEntity() {
List<String> list = new ArrayList<String>();
list.add("하위~~~~ 내이름은 오류 400이야!! 반가워!!");
ResponseDTO<String> response = ResponseDTO.<String>builder().data(list).build();
return ResponseEntity.badRequest().body(response);
}
포스트맨을 이용해서 실습해보면
400배드 리퀘스트가 반환된것을 볼 수 잇따.
리스폰스엔티티를 리턴하는 것과 리스폰디티오를 리턴하는 것을 비교했을떄
리턴된 바디에는 아무 차이가 없다.
단지 헤더와 HTTP status를 조작할 수 있다는 점이 다르다는 사실을 기억하자. 또 실습코드2-19에서는
비교를 위해 bad리퀘스트 매서드를 이용했디만, 정상적으로 응답을 반환한다면 ok매서드를 쓰면된ㄷ다.
package com.unoSpringBoot.study;
import java.util.ArrayList;
import java.util.List;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.unoSpringBoot.study.DTO.ResponseDTO;
import com.unoSpringBoot.study.DTO.TestRequestBodyDTO;
@RestController
@RequestMapping("test")
public class TestController {
@GetMapping
public String testController() {
return "Hello world";
}
@GetMapping("/testGetMapping")
public String testControllerWithPath() {
return "Hello world!! TestGetMapping";
}
@GetMapping("/{id}")
public String testControllerWithPathVariables(@PathVariable(required = false) String id) {
return "Hello wolrd!! ID = " + id;
}
@GetMapping("/testRequestParam")
public String testControllerRequestParam(@RequestParam(required = false) String id) {
return "Hello wolrd!! ID = " + id + "하위~~!!";
}
@GetMapping("/testRequestBody")
public String testControllerRequestBody(@RequestBody TestRequestBodyDTO testRequestBodyDTO) {
return "Hello Wolrd!!!! name " + testRequestBodyDTO.getName() + " 그리고 나이는 " + testRequestBodyDTO.getAge();
}
@GetMapping("/testResponseBody")
public ResponseDTO<String> testControllerResponsBody() {
List<String> list = new ArrayList<String>();
list.add("하위~~~~ 내이름은 ");
ResponseDTO<String> response = ResponseDTO.<String>builder().data(list).build();
return response;
}
@GetMapping("/testResponseEntity")
public ResponseEntity<?> testControllerResponseEntity() {
List<String> list = new ArrayList<String>();
list.add("하위~~~~ 내이름은 오류 400이야!! 반가워!!");
ResponseDTO<String> response = ResponseDTO.<String>builder().data(list).build();
return ResponseEntity.badRequest().body(response);
}
}
오늘 실습한 내용들이다.
'Spring boot 프로젝트 기록 > 1. 백엔드 개발' 카테고리의 다른 글
기본 쿼리와 쿼리 작성 방법 (0) | 2021.11.26 |
---|---|
서비스 레이어 : 비즈니스 로직 (0) | 2021.11.24 |
백엔드 서비스 아키텍처 (0) | 2021.11.22 |
실행, 라이브러리추가, 포스트맨 API추가 (0) | 2021.11.18 |
1. 백엔드 개발 환경설정 (0) | 2021.11.17 |
댓글