스프링 기본 HTTP 요청 매핑
Controller 어노테이션
- 클래스 단위에 추가하며, 자동으로 빈 등록을 해줍니다.
Controller 어노테이션 종류
- @Controller
- 반환 값이 String 이면 뷰 이름으로 인식하고 뷰를 찾은 후 뷰를 렌더링합니다.
- 응답 값이 기본적으로 HTML을 주도록 되어 있습니다.
- @RestController
- HTTP 메시지 바디에 바로 입력
- 응답 값으로 Rest API 요청에 대한 응답(주로 JSON)을 주도록 되어있습니다.
- @ResponseBody + @Controller
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {}
매핑 어노테이션
- 메소드 단위에 추가합니다.
- URL을 매핑하여 해당 URL로 요청이 들어오면 매핑한 메소드가 실행됩니다.
- 만약 클래스 단위에 추가하면, 클래스 단위 매핑 + 메소드 단위 매핑 으로 매핑됩니다.
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/hello")
@RestController
public class TestController {
@RequestMapping(value = "/world", method = RequestMethod.GET)
public String printWorld() {
return "Hello World!";
}
}
매핑 어노테이션
- @RequestMapping
- GET, POST 등의 요청 방식을 직접 지정합니다.
- 요새는 잘 안쓰인다고 합니다.
축약형 매핑 어노테이션
- @GetMapping
- 웹에서 데이터를 요청할 때 사용
- @PostMapping
- 웹에서 데이터를 전송할 때 사용
- @PutMapping
- 웹에서 데이터를 전체 수정할 때 사용
- @PatchMapping
- 웹에서 데이터를 일부 수정할 때 사용
- @DeleteMapping
- 웹에서 데이터를 삭제할 때 사용
스프링 HTTP 요청 파라미터 전송
- 파라미터를 넘기는 방법
- Get, Delete
- PathVariable (경로 변수) 사용
- @PathVariable(”id”) String id; 이런 형식으로 사용
- 만약, 경로 변수명과 파라미터 명이 같으면 경로변수명 생략 가능합니다.
- 여러번 사용할 수 있습니다.
- 요새는 위의 예시처럼 HTTP API에서 다음과 같이 리소스 경로에 식별자를 넣는 스타일을 선호한다고 합니다.
@GetMapping("/user/{userId}/orders/{orderId}") public String getUserOrderInfo(@PathVariable("userId") String userId,@PathVariable String orderId) { return "userId: " + userId + ", orderId: " + orderId; }
- query-params
- URL로 오는 쿼리스트링의 파라미터를 받을 수 있습니다.
- 쿼리스트링이란 사용자가 입력 데이터를 전달하는 방법 중의 하나
- localhost:8080/?key1=value1&key2=value2 이런 형식으로 사용됩니다.
- 게시판의 검색 필터 페이징에서 많이 사용하는 방식입니다.
- @RequestParam 이용
- @PathVariable 처럼 이름이 동일하면 자동으로 받아줍니다.
- String, int , Integer 같은 단순 타입이면 어노테이션 조차 생략가능합니다.
- 대신 required 옵션이 false로 설정됩니다.
- required 옵션
- true 가 기본값이며, 해당 파라미터 값이 없을 경우 예외 발생
- false 설정 시, 쿼리스트링에 파라미터가 없어도 예외가 발생하지 않습니다.
- defaultValue 옵션
- 해당 파라미터에 값이 없을 경우 기본 값을 설정하며 에러발생 X
- 하나의 키로 여러 값이 들어올 때 Map, MultiValueMap으로 받을 수 있습니다.
- @PathVariable 처럼 이름이 동일하면 자동으로 받아줍니다.
- URL로 오는 쿼리스트링의 파라미터를 받을 수 있습니다.
@GetMapping("/world") public String printWorld(@RequestParam("id") String id, @RequestParam String number) { return "id = "+id + ", number = "+number; }
- PathVariable (경로 변수) 사용
- Post, Put, Patch
- @RequestBody
- http body 정보를 편리하게 받아올 수 있습니다.
- body 정보를 읽어오기 때문에 Header 정보에서 값을 읽어오는 Get방식에서는 사용할 수 없습니다.
- 주로 JSON을 받아올 때 사용하는데, 데이터를 객체에 바로 매핑해줍니다.
- 클래스의 변수 명과 타입이 JSON의 키값과 동일해야합니다
- Setter가 없더라도 작동합니다.
// JavaBean 객체 생성 import lombok.Getter; @Getter public class TestDto { private String name; private int age; } // 컨트롤러 @RequestMapping("/hello") @RestController public class TestController { @PostMapping("/world") public String printWorld(@RequestBody TestDto testDto) { return "name = "+testDto.getName() + ", age = "+testDto.getAge(); } }
- http body 정보를 편리하게 받아올 수 있습니다.
- @RequestBody
- Get, Delete
-
-
- @RequestHeader
- http header 정보를 편리하게 받을 수 있습니다.
- @RequestHeader
-
- 공용
- @ModelAttribute
- 클라이언트가 전송하는 HTTP parameter(URL 끝에 추가하는 파라미터), HTTP Body 내용을 Setter 함수를 통해 1:1로 객체에 데이터를 바인딩합니다.
- 보통 form으로 데이터를 보낼 때 많이 사용합니다.
- @RequestParam처럼 조건만 맞으면 생략가능합니다
- RequestParam은 단순타입일 경우에만 생략가능
- ModelAttribute는 그 외의 경우 생략가능
- @RequestBody와의 차이점
- ModelAttribute는 객체에 setter가 필요하지만 RequestBody는 필요 없습니다.
- ModelAttribute는 쿼리스트링으로 들어오는 파라미터까지 받을 수 있지만, RequestBody는 안됩니다.
- ModelAttribute는 HTTP Body 내용이 multipart/form-data여야만 가능하며 application/json이 안되지만, RequestBody는 그 반대입니다.
- @ModelAttribute
'Spring Framework > Spring' 카테고리의 다른 글
스프링 MVC - 예외처리 (REST API) (0) | 2022.06.09 |
---|---|
스프링 MVC - Filter , Interceptor (0) | 2022.06.08 |
스프링 MVC - 전체 구조 (0) | 2022.06.08 |
Spring Validation (0) | 2022.06.07 |
Data Binding (0) | 2022.06.07 |
댓글