Back-End/Spring

[Spring MVC][스프링MVC 기본 기능] - 요청 매핑

얄루몬 2022. 3. 23. 11:31

💻본 포스팅은 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 김영한'님의 강의를 듣고 작성되었습니다.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., -

www.inflearn.com


[요청매핑의 여러가지  사용 예시 코드]

package hello.springmvc.basic.requestmapping;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;

@RestController
public class MappingController {
    private Logger log = LoggerFactory.getLogger(getClass());

    //기본 요청으로 HTTP 메서드 모두 허용하는 경우다.
    @RequestMapping("/hello-basic")
    public String helloBasic(){
        log.info("hellobasic");
        return "ok";
    }

    //특정 HTTP메서드 요청에만 허용하는 경우
    @RequestMapping(value = "/mapping-get-v1", method = RequestMethod.GET)
    public String mappingGetV1(){
        log.info("mapping-get-v1");
        return "ok";
    }

    //특정 HTTP 메서드 요청 허용의 축약버전
    @GetMapping("/mapping-get-v2")
    public String mappingGetV2(){
        log.info("mapping-get-v2");
        return "ok";
    }

    //최근 HTTP API는 리소스 경로에 식별자 넣는 것을 선하고 아래가 그 경우다.
    @GetMapping("/mapping/{userId}")
    public String mappingPath(@PathVariable("userId") String data){
        log.info("mappingPath userId = {}",data);
        return "ok";
    }

    //pathVariable 다중 매핑(사용)한 경우우
    @GetMapping("/mapping/{userId}/orders/{orderId}")
    public String mappingPath(@PathVariable("userId") String userId, @PathVariable Long orderId){
        log.info("mappingPath userId = {}, orderId = {}",userId, orderId);
        return "ok";
    }

    //특정 파라미터 조건 매핑(쿼리 파라미터를 조건 매핑할 수 있다) 잘 사용 X
    //파라미터의 mode가 debug라고 나와야 한다.
    @GetMapping(value = "/mapping-param", params = "mode=debug")
    public String mappingParam(){
        log.info("mappingParam");
        return "ok";
    }

    //특정헤더 조건 추가 매핑한 경우
    @GetMapping(value = "mapping-header", headers = "mode = debug")
    public String mappingHeader(){
        log.info("mappingHeader");
        return "ok";
    }

    //미디어 타입 조건 매핑 - HTTP 요청 Content-Type, consume
    //consumes = MediaType.APPLICATION_JSON_VALUE로 사용 가능
    @PostMapping(value = "/mapping-consume", consumes = "application/json")
    public String mappingConsumes() {
        log.info("mappingConsumes");
        return "ok";
    }

    //미디어 타입 조건 매핑 - HTTP요청 Accept, produce
    //produces = MediaType.TEXT_HTML_VALUE로 사용 가능
    @PostMapping(value = "/mapping-produce", produces = "text/html")
    public String mappingProduces() {
        log.info("mappingProduces");
        return "ok";
    }
}

[요청 매핑 - API 예시]

[BASIC]

package hello.springmvc.basic.requestmapping;

import org.springframework.web.bind.annotation.*;

@RestController
public class MappingClassController {

    @GetMapping("/mapping/users")
    public String user(){
        return "get users";
    }

    @PostMapping("/mapping/users")
    public String addUser(){
        return "post user";
    }

    @GetMapping("/mapping/users/{userId}")
    public String findUser(@PathVariable String userId){
        return "get UserId = "+userId;
    }
    @PatchMapping("/mapping/users/{userId}")
    public String updateUser(@PathVariable String userId){
        return "update UserId = "+userId;
    }
    @DeleteMapping("/mapping/users/{userId}")
    public String deleteUser(@PathVariable String userId){
        return "delete UserId = "+userId;
    }

}

[축약 코드]

package hello.springmvc.basic.requestmapping;

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/mapping/users")
public class MappingClassController {

    @GetMapping
    public String user(){
        return "get users";
    }

    @PostMapping
    public String addUser(){
        return "post user";
    }

    @GetMapping("/{userId}")
    public String findUser(@PathVariable String userId){
        return "get UserId = "+userId;
    }
    @PatchMapping("/{userId}")
    public String updateUser(@PathVariable String userId){
        return "update UserId = "+userId;
    }
    @DeleteMapping("/{userId}")
    public String deleteUser(@PathVariable String userId){
        return "delete UserId = "+userId;
    }

}
  • 위와 같이 계층을 이용한 url 매핑이 요즘 선호되는 방식이라고 한다.