-
2.2.4 매개변수를 넘겨받는 방법Spring/웹 개발 101 2022. 4. 8. 01:17반응형
@PathVariable 을 사용하면 됩니다.
package com.example.demo.controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("test") //resource public class TestController { @GetMapping("/{id}") public String testControllerWithPathVariables(@PathVariable(required = false) int id) { return "Hello World! id : " +id; } }
=> required가 false이므로 굳이 값을 쓰지 않아도 정상적으로 출력됩니다. (물론 id의 값은 안나오겠지만요)
=> 책은 이렇게 써있는데 왜 제가 쓰면 에러가 날까요?
@RequestParam을 사용하면 됩니다.
-?id={id}와 같이 매개변수로 넘어오는 값을 변수로 받을 수 있습니다.
package com.example.demo.controller; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("test") //resource public class TestController { @GetMapping("/testRequestParam") public String testControllerRequestParama(@RequestParam(required = false) int id) { return "Hello World! id : " +id; } }
@RequestBody을 사용하면 됩니다.
-반환하고자 하는 리소스가 복잡할 때 사용합니다. EX) JSON
package com.example.demo.controller; import com.example.demo.dto.ResponseDTO; import com.example.demo.dto.TestRequestBodyDTO; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.List; @RestController @RequestMapping("test") //resource public class TestController { @GetMapping("/testRequestBody") public String testControllerRequestBody(@RequestBody TestRequestBodyDTO TestRequestBodyDTO) { return "Hello World! id " +TestRequestBodyDTO.getId() + " Message : "+ TestRequestBodyDTO.getMessage(); } }
package com.example.demo.dto; import lombok.Data; @Data public class TestRequestBodyDTO { private int id; private String message; }
@RestController : @Controller + @ResponseBody
package com.example.demo.controller; import com.example.demo.dto.ResponseDTO; import com.example.demo.dto.TestRequestBodyDTO; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.List; @RestController @RequestMapping("test") //resource public class TestController { @GetMapping("/testResponseBody") public ResponseDTO<String> testControllerResponseBody(@RequestBody TestRequestBodyDTO TestRequestBodyDTO) { List<String> list = new ArrayList<>(); list.add("Hello World! I'm a ResponseDTO"); ResponseDTO<String> response = ResponseDTO.<String>builder().data(list).build(); return response; } }
@ResponseEntity
- HTTP 응답의 바디뿐만 아니라 여러 다른 매개변수들, 예를 들어 status나 header를 조작하고 싶을 때 사용합니다.
package com.example.demo.controller; import com.example.demo.dto.ResponseDTO; import com.example.demo.dto.TestRequestBodyDTO; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.List; @RestController @RequestMapping("test") //resource public class TestController { @GetMapping("/testResponseEntity") public ResponseEntity<?> testControllerResponseEntity() { List<String> list = new ArrayList<>(); list.add("Hello World! I'm a ResponseEntity & you got 400"); ResponseDTO<String> response = ResponseDTO.<String>builder().data(list).build(); //http status를 400으로 설정 return ResponseEntity.badRequest().body(response); } }
=> responseDTO를 리턴한것과 비교했을 때 BODY에는 아무런 차이가 없다. 단지 헤더와 HTTP Status를 조작할 수 있다는 점만이 다르다.
package com.example.demo.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("todo") public class TodoController { //testTodo메서드 작성하기 }
반응형'Spring > 웹 개발 101' 카테고리의 다른 글
2.2.6 퍼시스턴스 레이어 : 스프링 데이터 JPA (0) 2022.04.11 2.2.5 서비스 레이어 : 비즈니스 로직 (0) 2022.04.10 2.2.3 REST API || 2.2.4 컨트롤러 레이어 (0) 2022.04.07 2.2.2 모델, 엔티티, DTO (0) 2022.04.04 2.2 백엔드 서비스 아키텍쳐 (0) 2022.04.03