Spring MVC

공부한것 다 기록해·2023년 8월 8일
0

MVC 패턴

M(Model), V(View), C(Controller)

  • Model : 로직 안에서 이동하고 있는 데이터
  • View: 화면은 화면의 역할만 한다.
  • Controller: 비즈니스 로직을 처리하고 모델과 뷰를 응답으로 준다.

Spring MVC - HTTP 요청 / 응답

스프링 MVC 프로젝트 생성

WebSample 프로젝트
<기본 설정>
* 언어 : Java
* 타입 : Gradle
* 프로젝트 SDK : OpenJDK17
* 그룹, 아티팩트 등 기본값
* Java : 11

<종속 요소(Dependency)>
Spring Web
Lombok

스프링 MVC 기본 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 : 일부 수정
  • @DeletMapping : 삭제
@PostMapping("/order/1")
public String createOrder(){
	log.info("Create order");
}

intellij http test

  • 위에서 만든 HTTP 요청을 간단히 해볼 수 있다.
  • POSTMAN이나 기타 다른 툴로도 가능
### create order
POST http://localhost/order/1

스프링 HTTP 요청 파라미터 전송

파라미터를 넘기는 방법
Get,Delete - PathVariable을 주로 사용

PathVariable : 요새는 id를 path에 넣는 것을 선호
PathVariable("id") String identity;

  • 하지만 이름이 같으면 생략 가능
  • 여러개를 넣을 수 있음

query-params : 추가적인 정보들 입력
게시판의 검색 필터 페이징에서 많이 사용

@RequestParam 사용법

  • PathVariable처럼 이름을 동일하게 하면 자동으로 받아줌
  • required(true가 기본값), defaultValue 옵션 설명
  • 사실 없어도 자동으로 나옴
  • Map, MultiValueMap으로 요청 받는 방법
@GetMapping("/order/{orderId}")
public String getOrder(@PathVariable("orderId") String orderId){
	log.info("Get some order information : " + orderId);
    return "orderId: " + orderId + ", orderAmount:100";
}

@GetMapping("/order")
public String searchOrder(@RequestParam("orderId") String orderId,
@RequestParam("orderAmount") Integer orderAmount){
	log.info("Search order information : " + orderId + ",
    orderAmount : " + orderAmount);
    
    return "orderId: " + orderId + ", orderAmount: " + orderAmount;
}

Post, Put(전부다 변경), Patch(일부분 수정)
@RequestBody : http body 정보를 편리하게 받을 수 있음
주로 사용하는 메시지 포맷 : JSON(key, value 데이터)
JSON을 Map또는 JavaBean 객체로 받을 수 있다.

@RequestHeader : http header 정보를 편리하게 받을 수 있음

@PostMapping("/order")
public String createOrder(
	@RequestBody OrderCreateRequest orderCreateRequest,
    @RequestHeader String userAccountId
){
	log.info("Create order : " + orderCreateRequest + ", userAmountId : " + userAccountId);
    
    return "orderId: 2, orderAmount:1000 ";
}	

0개의 댓글