1. 요청 매핑
1. @RequestMapping
1) method 속성으로 HTTP 메서드를 지정하지 않으면 HTTP 메서드와 무관하게 호출된다. (모두 허용 GET, HEAD, POST, PUT, PATCH, DELETE)
2) 스프링 부트 3.0 부터는 기존에는 마지막에 있는 /hello-basic , /hello-basic/ 는 서로 다른 URL 요청을 사용해야 한다.2. 축약 HttpMethod
1) @GetMapping
2) @PostMapping
3) @PutMapping
4) @DeleteMapping
5) @PatchMapping2. 요청 매핑 속성
1. @PathVariable
1) 경로에 있는 변수를 매개변수로 받아서 컨트롤러에 사용할 수 있는 속성이다.
2) pathVariable 다중 매핑이 가능하다.@RequestMapping("/mapping/{userId}") public String helloBasic1( @PathVariable String userId ){ log.info("mappingPath userID={}",userId); return "ok"; }{userId}을 받아서 Controller 내부에서 사용이 가능하다.
2. params
1) 해당 쿼리가 없을 경우 Error을 발생 시키는 속성이다.
2) 없을 경우 400 Error가 발생한다.@GetMapping(value = "/mapping-param", params = "mode=debug") public String mappingParam() { log.info("mappingParam"); return "ok"; }3. header
1) 해당 헤더가 없을 경우 Error을 발생 시키는 속성이다.
2) 없을 경우 404 Error가 발생한다.@GetMapping(value = "/mapping-header", headers = "mode=debug") public String mappingHeader() { log.info("mappingHeader"); return "ok"; }4. consumes (Content-Type)
1) 해당 Content-Type이 아닐 경우 Error을 발생 시키는 속성이다.
@PostMapping(value = "/mapping-consume", consumes = "application/json") public String mappingConsumes() { log.info("mappingConsumes"); return "ok"; }5. produces (Accept)
1) 해당 Accept이 아닐 경우 Error을 발생 시키는 속성이다.
@PostMapping(value = "/mapping-produce", produces = "text/html") public String mappingProduces() { log.info("mappingProduces"); return "ok"; }3. 요청 매개변수
1. 파라미터
1. @RequestParam
1) 요청 파라미터(쿼리 등)를 매개변수로 받는다.
- 1) @RequestParam("username")
2) @RequestParam = 변수이름이 파라미터명이랑 같을 경우 생략가능@RequestMapping("/request-param-v2") @ResponseBody public String requestParamV2( @RequestParam("username") String username, @RequestParam("age") int age ) { log.info("username : {}",username); log.info("age : {}",age); return "ok"; }3) @RequestParam 생략 시 (생략도 가능)
속성에서 required=false를 적용시킴으로 주의한다.
required=false 일 경우 파라미터 null 허용
required=true 일 경우 파라미터 null 불가 (default)2. @ModelAttribute
1) ModelAttribute를 통해 객체로 파라미터를 바로 받을 수 있다.
2) ModelAttribute 사용 시 자동으로 model에 값이 등록된다.
@RequestMapping("/model-attribute-v1") @ResponseBody public String modelAttributeV1(@ModelAttribute HelloData helloData) { log.info("username : {}",helloData.getUsername()); log.info("age : {}",helloData.getAge()); return "ok"; }2) @ModelAttribute 생략 가능
3. HttpServletRequest 을 불러서 직접 받기2. Message Body - 단순 텍스트
1. @RequestBody
public String requestBodyStringV4(@RequestBody String messageBody) { log.info(messageBody); return "ok"; }2. HttpEntity
- InputStream inputStream
- HttpServletRequest request
3. Message Body - Json
1. @RequestBody
@PostMapping("/request-body-json-v5") @ResponseBody public HelloData requestBodyJsonV5(@RequestBody HelloData helloData) { log.info("username = {}",helloData.getUsername()); log.info("age = {}",helloData.getAge()); return helloData; }2. HttpEntity
@PostMapping("/request-body-json-v4") @ResponseBody public String requestBodyJsonV4(HttpEntity<HelloData> requestBody) { HelloData helloData = requestBody.getBody(); return "ok"; }
- InputStream inputStream
- HttpServletRequest request
4. Redirect 시
1. RedirectAttributes
1) Spring MVC에서 리다이렉트 시 데이터를 전달하기 위해 사용하는 인터페이스입니다.
2) RedirectAttributes VS Model
데이터 유지 범위 : 리다이렉트된 후에도 데이터 유지 VS 현재 요청에서만 데이터 유효@PostMapping("/submit") public String handleSubmit(RedirectAttributes redirectAttributes) { redirectAttributes.addFlashAttribute("message", "Data saved successfully!"); return "redirect:/result"; }Message Body - Tip
- @ResponeBody에 상태코드 사용하고 싶다면 @ResponseStatus 사용
@PostMapping("/request-body-json-v5") @ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseBody public HelloData requestBodyJsonV5(@RequestBody HelloData helloData) { return helloData; }
- 상태코드를 런타임에서 바꿔야 할 경우 ResponseEntity 사용
@PostMapping("/request-body-json-v4") @ResponseBody public ResponseEntity<HelloData> requestBodyJsonV4(HttpEntity<HelloData> requestBody) { HelloData helloData = requestBody.getBody(); return new ResponseEntity<>(helloData, HttpStatus.BAD_REQUEST); }