본문 바로가기
Spring boot 프로젝트 기록/1. 백엔드 개발

매개변수를 넘겨받는 방법

by 으노으뇨 2021. 11. 23.
728x90
반응형
SMALL

실습을 진행할것이지만 앞으로 매개변수를 넘겨받는 방법에 대해 실습을 통해 알아보고 앞으로 어떻게 적용할지를

위해서 하루는 따로 정리해서 매개변수를 넘겨받는 방법에 대해 공부하려고한다.

/test 방식이 아닌 /test/{id} 등으로 URI의 경로로 넘어오는 값을 변수로 받을수있다.
	@GetMapping("/{id}")
	public String testControllerWithPathVariables(@PathVariable(required = false) int id) {
		return "Hello wolrd!! ID = " + id;
	}

를 입력하고, 포스트맨으로 실행해보자

한글이 깨지고 오류가 발생했다.

여기서 해결하자

2021.11.23 - 스프링부트 한글오류

 

스프링부트 한글오류

스프링부트 공부하는 도중 한글을 파라미터로 넘겼을때 한글이 깨지는 현상이 일어났다. 해결해보자 .아마도 스프링부트의 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);
	}
}

오늘 실습한 내용들이다.

 

 

728x90
반응형
LIST

댓글