Spring MVC 프로젝트 생성
WebSample 프로젝트
<기본 설정>
* 언어 : Java
* 타입 : Gradle
* 프로젝트 SDK : OpenJdk17
* 그룹, 아티팩트 등 기본값
* Java : 11
<Dependency>
Spring Web, Lombok
스프링 기본 HTTP 요청 매핑
Controller, RestController 차이
- Controller : 응답값이 기본적으로 HTML을 주도록 되어있음
- RestController : 응답값으로 Rest API 요청에 대한 응답(주로 JSON)을 주도록 되어있음
매핑 어노테이션
- @RequestMapping : GET, POST 등 요청 방식을 직접 지정
@RequestMapping(value = " /order/1", method = RequestMethod.GET)
public String getOrder(){
log.info("Get some order information");
return "orderId:1, orderAmount:100";
}
- 축약형 매핑 어노테이션
- @GetMapping : 데이터를 가져옴
- @PostMapping : 데이터를 전송함
- @PutMapping : 전체 수정
- @PatchMapping : 일부 수정
- @DeleteMapping : 삭제
@GetMapping("/order/1")
public String getOrder(){
log.info("Get some order");
return "orderId:1, orderAmount:1000";
}
@PostMapping("/order/1")
public String createOrder(){
log.info("Create order");
return "orderId:2, orderAmount:1000";
}
스프링 HTTP 요청 파라미터 전송
파라미터 넘기는 법
- GET, DELETE
- PathVariable : 요새는 id를 path에 넣는 것을 선호
- @PathVariable("id") String identity;
- 하지만 이름이 같은 생략 가능 (여러 개 넣을 수 있음)
- query-parmas : 추가적인 정보들 입력
- 게시판의 검색 필터 페이징에서 많이 사용
- @RequestParam 사용법
- PathVariable처럼 이름을 동일하게 하면 자동을 받아줌
- required, defaultValue 옵션 설명
- Map, MultiValueMap으로 요청 받는 방법
@GetMapping("/order/{orderId}")
public String getOrder(@PathVariable("orderId") String id){
log.info("Get some order" + id);
return "orderId:" + id + ", orderAmount:1000";
}
@GetMapping("/order")
public String getOrderWithRequestParam(
@RequestParam("orderId") String id,
@RequestParam("orderAmount") String amount){
log.info("Get order" + id + " , " + amount);
return "orderId:" + id + ", orderAmount:" + amount;
}
- Post, Put, Patch
- @RequestBody : http body 정보를 편리하게 받을 수 있음
- 주로 사용하는 메세지 포멧은 JSON(현재 사실상의 표준)
- @RequestHeader : http header 정보를 편리하게 받을 수 있음
@PostMapping("/order")
public String createOrder(
@RequestBody OrderCreateRequest orderCreateRequest,
@RequestHeader String userAccountId){
log.info("Create order : " + orderCreateRequest + ", userAccountId : " + userAccountId);
return "orderId : " + orderCreateRequest.orderId + ", " + "orderAmount : " + orderCreateRequest.orderAmount;
}
@Data
public static class OrderCreateRequest{
private String orderId;
private Integer orderAmount;
}