RequestMapping 을 이용하여 url 을 메서드 레벨에서 매핑하는 방법을 알아보도록 하겠습니다.
RequestMapping
Mapping 단위
1. Class 단위
2. Method 단위
@RequestMapping Annotaion 은 Class 에서 매핑을 할 수 있고, method 별로 매핑할 수 있습니다.
해당 Annotation 을 쓰기 위해 @Controller Annotation 을 먼저 Class 에 매핑을 해야합니다.
@RequestMapping("/hello")
아무런 옵션을 주지 않은 기본 상태입니다.
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UrlMappingController {
@RequestMapping("/hello")
public void m1() {
System.out.println("/hello");
}
}
아무것도 주지 않은 상태라면 GET, POST, PUT, DELETE 어떤 HTTP method 든 다 받을 수 있습니다.
딱 url 을 /hello 로만 들어가야 오류가 나지 않습니다.
이는 @RequestMapping(value="/hello") 와 동일합니다.
@RequestMapping("/hello/hi")
package com.mycom.myapp;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UrlMappingController {
@RequestMapping("/hello/hi")
public void m2() {
System.out.println("/hello/hi");
}
}
이도 마찬가지로 /hello/hi 에 들어가야만 오류가 나지 않습니다.
@RequestMapping({"/hello", "/hi"})
package com.mycom.myapp;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UrlMappingController {
@RequestMapping({ "/hello", "/hi" })
public void m2() {
System.out.println("/hello, /hi");
}
}
복합적인 url 매핑을 하고싶다면 {} 배열을 사용하면 됩니다.
이도 마찬가지로 value={"/hello", "/hi"} 와 같습니다. hi, hello url 둘 다에서 매핑이 됩니다.
@RequestMapping(value="/httpMethod", method=RequestMethod.GET)
package com.mycom.myapp;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class UrlMappingController {
@RequestMapping(value = "/httpMethod", method = RequestMethod.GET)
public void m2() {
System.out.println("GET 방식");
}
@RequestMapping(value = "/httpMethod", method = RequestMethod.POST)
public void m3() {
System.out.println("POST 방식");
}
@RequestMapping(value = "/httpMethod", method = RequestMethod.PUT)
public void m4() {
System.out.println("PUT 방식");
}
@RequestMapping(value = "/httpMethod", method = RequestMethod.DELETE)
public void m5() {
System.out.println("DELETE 방식");
}
}
만약 각각의 HTTP method 방식과 매핑되는 method 를 만들고 싶다면 method 옵션을 주시면 됩니다.
이때 value 도 꼭 붙여야합니다. value="/httpMethod1" 이런식으로 적어야하지, 그냥 "/httpMethod1" 만 적으면 오류가 납니다.
각각의 방식으로 보내지 않으면 warn 로그가 찍힙니다. 즉 오류가 납니다.
GET 방식을 쓰고 싶다면 @RequestMapping 이 아니라 그냥 @GetMapping 을 써도 됩니다. POST 도 마찬가지 입니다.
@RequestMapping(value="/hello/{no}", method=RequestMethod.GET)
package com.mycom.myapp;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class UrlMappingController {
@RequestMapping(value = "/hello/{no}", method = RequestMethod.GET)
public void m1(@PathVariable String no) {
System.out.println("GET: " + no);
}
@RequestMapping(value = "/hello/{no}", method = RequestMethod.DELETE)
public void m1(@PathVariable int no) {
System.out.println("DELETE: " + no);
}
}
만약 들어오는 method 방식은 다르되, 같은 url 을 가지고 싶다면 다음과 같이 설정합니다.
@PathVariable 로 path 를 받을 수 있습니다.
Class 에 @RequestMapping
package com.mycom.myapp;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RequestMapping("/hihi")
@Controller
public class UrlMappingController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public void m1() {
System.out.println("/hihi/hello");
}
}
Class 에 @RequestMapping 을 하면 method 상위에 path 를 설정할 수 있습니다.
# Spring RequestMapping 방법 # 스프링 requestmapping path # spring requestmapping # spring RequestMapping url
'🧶 𝗪𝗲𝗯 > Spring' 카테고리의 다른 글
[Spring] MyBatis 환경 세팅 (0) | 2022.10.20 |
---|---|
[Spring] Parameter 로 query string 가져오기 (1) | 2022.10.19 |
[스프링 입문] 2.스프링 웹 개발 기초 - API (0) | 2021.10.05 |
[스프링 입문] 2.스프링 웹 개발 기초 - MVC와 템플릿 엔진 (0) | 2021.10.05 |
[스프링 입문] 2.스프링 웹 개발 기초 - 정적 컨텐츠 (0) | 2021.10.05 |