메소드 위에 @RequestMapping("/url")
이 붙으면 /url
이 호출됬을때 해당 메소드를 실행하도록 매핑한다. 해당 클래스가 @Controller
로 지정되어 있다면 , 메소드가 String을 반환 했을 때 반환 값은 view 이름으로 인식된다.
대부분 속성을 배열로 제공하므로 다중 설정이 가능하다.
@RequestMapping("/hello","/hi)
public String hello(){
log.info("hello");
return "ok";
}
@RequestMapping
이 특정 HTTP 메소드 요청만 허용하도록 설정할 수 있다.
@RequestMapping(value = "/hello", method = RequestMethod.GET)
@RequestMapping(value = "/hello", method = RequestMethod.POST)
->각각 @GetMapping
, @PostMapping
으로 대체해서 사용할 수 있다.
클래스에도 @RequestMapping
Annotation을 붙일 수 있다.
이때, 클래스 아래에 모든 메소드는 기본적으로 클래스단위의 @RequestMapping
을 기본으로 한다.
예를들어 class에 @RequestMapping("/board")
Annotation이 있다면,
아래와 같은 메소드가 있을 때 해당 메소드는 /board/find
에서 동작하게 된다.
@GetMapping("/find")
public String findByWriterId(){
//생략
return "board/findForm";
}
위의 메소드는
/board/find
라는 경로에서 Get방식으로 요청이 들어왔을때,
board폴더의 "findForm.html" 이라는 View를 반환한다.
@RequestMapping(value = "/URL경로", method = RequestMethod.Get) 을 축약해서 사용할 수 있다.
@GetMapping
/ @PostMapping
/ @PutMapping
/@DeleteMapping
/@PatchMapping
해당 URL에 Get 요청을 하면 해당 메소드가 실행된다.
아래 예제는 localhost:8080/board
URL에 대해서, Get요청이 왔을때 실행되는 메소드이다.
로직을 실행 한 뒤, templates/board/board.html
의 경로를 가진 View를 호출한다.
@GetMapping("/board")
public String boardHome(Model model){
List<Post> posts = postRepository.findAll();
model.addAttribute("posts",posts);
return "board/board";
}
model.addAttribute("posts",posts);
는 model에 posts라는 객체를 담아서,
board.html
을 호출한다.
view에서 그 객체를 "posts" 로 인식한다. 그럼 view에서는 "posts"라는 이름으로 넘어온 객체의 값들을 활용해서 화면을 랜더링 할것이다.
해당 URL에서 POST 요청을 하면 해당 메소드가 실행된다.
아래 예제는 localhost:8080/board
URL에서 어떤 정보를 입력한 뒤
POST방식의 요청이 왔을때 실행되는 메소드이다.
/board
에서 입력받은 정보는@RequestParam
또는 @ModelAttribute
(객체)로 받아서 사용할 수 있다.
@PostMapping("/board")
public String findBoard(@ModelAttribute("form") Form form, Model model){
//form을 사용하여 처리 (생략)
return "redirect:/board/find";
}
/board/find
url view를 호출한다. ( @GetMapping("/board/find"))를 찾아서 실행한다.
Request의 조건에 따라 호출을 다르게 하도록 설정할 수 있다.
URL에 특정 파라미터가 존재할때만 호출되도록 매핑한다.
아래 예제는 /mapping-param?mode=debug
같이 mode=debug
가 존재할때만 호출된다.
@GetMapping(value = "/mapping-param", params = "mode=debug")
public String mappingParam() {
log.info("mappingParam");
return "ok";
}
- params="mode",
- params="!mode"
- params="mode=debug"
- params="mode!=debug" (! = )
- params = {"mode=debug","data=good"}
Request 헤더에 특정 조건이 존재할때만 호출되도록 매핑한다.
아래 예제는 /mapping-header
로 요청이 왔을 때, 헤더에 mode=debug
가 존재할때만 호출된다.
@GetMapping(value = "/mapping-header", headers = "mode=debug")
public String mappingHeader() {
log.info("mappingHeader");
return "ok";
}
- headers="mode",
- headers="!mode"
- headers="mode=debug"
- headers="mode!=debug" (! = )
(참고)김영한님 인프런 Spring MVC-2
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2