Controller Annotation
1. PathVariable
👉 클라이언트가 URL 경로에 포함시켜 보낸 데이터를 받아올 수 있는 Annotation
👀 Client - Server 예시
[GET] http://localhost:8080/hello/request/star/Robbie/age/95
@GetMapping("/star/{name}/age/{age}")
@ResponseBody
public String helloRequestPath(@PathVariable String name, @PathVariable int age)
2. RequestParam
👉 클라이언트가 Query로 보낸 데이터를 받아올 수 있는 Annotation
👀 Client - Server 예시
[GET] http://localhost:8080/hello/request/form/param?name=Robbie&age=95
@GetMapping("/form/param")
@ResponseBody
public String helloGetRequestParam(@RequestParam String name,
@RequestParam(required = false) Integer age)
👀 코드로 테스트해 본 것
✅ RequestParam은 생략이 가능하다.
➡ 요청 데이터가 Simple Value Type(Primitive, WrapperClass 등) 일 경우 자바 스프링에서 자동 매핑 [예외 존재]
✅ "required" 옵션이 false인 경우 null 값을 할당한다.
➡ 요청에서 값이 없는 데이터가 Primitive Type인 경우 null값을 할당할 수 없기에 에러 발생
👀 궁금한 것
❓PathVariable과 ReqeustParam은 언제 사용하는 것이 좋은가
✅ RequestParam 사용 유형
➡ Retrieving query parameters
➡ Retrieving form data
➡ Retrieving request headers 💢 글 잘못된 정보, 테스트 해보니 안됨 [ 대체제 @RequestHeader ]
✅ PathVariable 사용 유형
➡ Capturing resource IDs
➡ Capturing slugs or friendly URLs
➡ Capturing version numbers or other dynamic parts
Difference between @RequestParam and @PathVariable in Spring MVC?
How to choose between the @RequestParam and @PathVariable in Spring MVC
medium.com
3. ModelAttribute
👉 클라이언트가 Query로 보낸 데이터를 객체로 받아올 수 있는 Annotation
👀 Client - Server 예시
[GET] http://localhost:8080/hello/request/form/param/model?name=Robbie&age=95
@GetMapping("/form/param/model")
@ResponseBody
public String helloRequestParam(@ModelAttribute Star star)
👀 코드로 테스트해본 것
✅ ModelAttribute는 생략이 가능하다.
➡ 요청 데이터가 Simple Value Type이 아닌 경우 자바 스프링에서 자동 매핑 [예외 존재]
✅ 객체에 매핑되는 데이터가 없는 경우 Reference Type에 null 할당, Primitive Type에 0 할당
✅ Constructor, Setter 둘 다 없는 경우 보낸 데이터가 할당되지 않음
4. RequestBody
👉 클라이언트가 보낸 Payload 데이터를 객체로 받아올 수 있는 Annotation
👀 Client - Server 예시
[POST] http://localhost:8080/hello/request/form/param/model
[Payload] { "name":"Robbie", "age":95 }
@GetMapping("/form/json")
@ResponseBody
public String helloPostRequest(@RequestBody Star star)
👀 코드로 테스트해본 것
✅ 객체에 매핑되는 데이터가 없는 경우 Reference Type에 null 할당, Primitive Type에 0 할당
✅ 의외로 Constructor, Setter가 없는데도 할당이 제대로 됨
👀 궁금한 것
❓ModelAttribute와 RequestBody는 언제 사용하는 것이 좋은가
✅ ModelAttribute 사용 유형
➡ Query String 및 Form 형식으로 데이터를 받는 경우
✅ RequestBody 사용 유형
➡ JSON, XML 등의 형식으로 데이터를 받는 경우
@RequestBody vs @ModelAttribute
1. @RequestBody와 @ModelAttribute Controller.java @RequestBody와 @ModelAttribute는 클라이언트 측에서 보낸 데이터를 Java…
tecoble.techcourse.co.kr
느낀 점
그동안 Client에서 요청하는 데이터를 다룰 때 생각 없이 Annotation을 사용했다는 것을 새삼 느꼈다. 개념에 대해서 다시 한번 되새길 수 있어서 좋았다. 내용을 정리하면서 "이런 건 되나 저런 건 되나" 하는 것들을 직접 코드를 작성하고 테스트해볼 수 있어서 각 상황에서 어떻게 동작하는지 알 수 있게 되었다. 기본기라는 것이 왜 중요한지 또 느낄 수 있는 시간이었다. 계속해서 "왜?", "이건 될까?"라는 질문을 계속하면서 강의를 천천히 들어봐야겠다.
'개발일지 > TIL' 카테고리의 다른 글
[230626] 네트워크와 Java Spring 기본 개념 이해하기 (4) (0) | 2023.06.26 |
---|---|
[230625] 네트워크와 Java Spring 기본 개념 이해하기 (3) (0) | 2023.06.25 |
[230623] 네트워크와 Java Spring 기본 개념 이해하기 (1) (3) | 2023.06.23 |
[ 230622 ] 제대로 이해하고 하자 (0) | 2023.06.22 |
[ 230621 ] 공공데이터 포털 200만건 데이터 DB에 넣기 (0) | 2023.06.21 |