만들어가는 세상

[SPRING] @RequestMapping 활용하기 본문

IT/SPRING

[SPRING] @RequestMapping 활용하기

윤재웅 2019. 11. 8. 00:16

[SPRING] @RequestMapping 활용하기

여러 경로를 한 메서드에 처리하고 싶다면, 배열로 경로 목록을 지정하면 된다.

@Controoler
public class HomeController {
@RequestMapping({"/main", "/index"})
    public String list(ModelMap model){
    ....
    }
}
HTTP 전송 방식 지정
    • 로그인 데이터나 게시글 데이터를 존성해야 할 경우 <form> 태그에서 method 속성값을 “post”로 지정하는 것이 일반적입니다.
    • @RequestMapping 애노테이션은 method 속성을 이용해서 메서드에서 처리할 전송 방식을 지정할 수 있습니다.
    • 동일한 경로를 값으로 갖고 method 속성만 다를 수 있습니다.
@Controller
public class RegistrationController{
    @RequestMapping(value="/member/regist", method=RequestMethod.GET)
    public String form(...) {
        return "member/registrationForm";
    }
@RequestMapping(value="/member/regist", method=RequestMethod.POST)
    public String regist(...) {
        return "member/registered";
    }
}

@PathVariable을 이용한 경로 변수

• 게시글의 내용을 보여주는 URL을 보면 http://host/readArticles?id=10와 같이 요청 파라미터를 이용하는 경우가 많습니다.
• 하지만, URL자체를 이용해서 게시글 링크를 표현하는 경우도 많습니다.
• @RequestMapping 애노테이션은 경로에 {변수} 형식의 경로 변수를 사용할 수 있습니다.
• @PathVariable 애노테이션을 사용하면 경로 변수의 값을 파라미터로 전달받을 수 있습니다.
@Controller
public class MemberController {
    @RequestMapping("/members/{memberId}")
    public String memberDetail(@PathVariable Stirng memberId, Model model){
       ...
    }
 }
### 경로 변수는 한 개 이상 사용할 수 있다.
@RequestMapping("/members/{memberId}/orders/{orderId}")
public String memberOrderDetail(){
    @PathVariable ("memberId") String memberID,
    @PathVariable ("orderId") Long orderId, Model model){
    ...
}
Ant 패턴을 이용한 경로 매핑
    • * : 또는 그 이상의 글자
ex) @RequestMapping(“/member/?.info”) : /member/로 시작하고, 확장자가 .info로 끝나는 모든 경로
    • ? : 1개 글자
ex) @RequestMapping(“/faq/f?00.fq”) : /faq/f로 시작하고, 1글자가 사이에 위치하고 00.fq로 끝나는 모든 경로
    • ** : 0개 도는 그 이상의 디렉토리 경로
ex) @RequestMapping(“/folders/**/files”) : /folders/로 시작하고, 중간에 0개 이상의 중간 경로가 존재하고 /files로 끝나는 모든 경로. 예를 들어, /folders/files, /folders/1/2/3/files 등이 매핑됩니다.

처리 가능한 요청 컨텐트 타입.응답 가능한 컨텐트 타입 한정

• 서비스 또는 클라이언트/서버간 통신 방식으로 REST API가 자리를 잡으면서 HTTP의 데이터로 JSON이나 XML을 전송하는 경우가 증가
• @RequestMapping은 컨트롤러 메서드에서 처리 가능한 요청 컨텐트 타입과 응답 컨텐트 타입을 제한하는 방법을 제공
• 같은 URL이라 하더라도 컨텐트 타입에 따라 다른 응답을 보여주도록 처리
• 요청 컨텐트 타입 제한 = comsumes 속성 사용하면 된다. 예를 들어 Content-Type 요청 헤더가 “application/json”인 경우만 처리하고 싶다면 다음과 같은 코드를 사용하면 된다.
@RequestMapping(value="/member", method=@RequestMethod.POST, consumes="application/json")
public Result addMemeber(@RequestBody NewMember mem) {
    ...
}
• 반대로 응답 결과로 JSON을 요구하는 요청을 처리하고 싶다면, 즉 Accept 요청 헤더에 application/json이 표함된 경우만 
처리하고 싶다면, producess 속성을 사용하면 된다.
@RequestMapping(value="/member/{memberId}", method=@RequestMethod.GET, produces="application/json")
@ResponseBody
public MemberInfo getMember(@PathVariable String memberId){
...
}
Comments