본문 바로가기
카테고리 없음

@RequestMapping의 옵션 종류 및 속성

by cook_code 2023. 7. 25.

스프링에서 제공하는 RequestMapping 어노테이션에 부여할 수 있는 옵션에 대해 소개하려고 합니다. 

@RequestMapping 어노테이션은 괄호 안에 해당 코드를 매핑할 주소(URL) 및 옵션을 적어주는 형식으로 쓰입니다. 

 

@RequestMapping의 옵션 종류

 

이름 타입 설명
value String[] URL 값으로 매핑 조건 부여 (defualt)
method RequestMethod[] HTTP Request 메서드 값을 매핑 조건으로 부여, 
사용 가능한 메서드는 
GET / POST / HEAD / OPTIONS / PUT / DELETE / TRACE
params String[] HTTPRequest 파라미터를 매핑 조건으로 부여
consumes String[] 설정과 Content-Type Request 헤더가 일치할 경우에만 URL 이 호출됨
produces String[] 설정과 Accept Request 헤더가 일치할 경우에만 URL이 호출됨

 

value

- 매핑된 URL 주소

  • value값만 주어지는 경우 "value="부분을 생략하고 주소만 적어도 됩니다.
  • {}형식으로 URL을 감싸주면 다중 요청도 가능합니다.
  • /foo/** 형식의 URL로 쓰일 경우 동적인 연결이 가능합니다.
  • /foo/{} {}사이에 변수를 넣어 URL을 매핑할 수도 있습니다.

 

method

- 데이터를 주고 받는 방식과 관련된 옵션

  • GET / POST / PUT / DELETE / HEAD / OPTIONS / TRACE 등 8가지 메소드가 있습니다. 
  • Spring 4.3 버전 이상부터는 @GetMapping / @PostMapping / @DeleteMapping 의 사용이 가능합니다.
  • @RequestMapping은 class, method에 사용 가능하지만, 위의 어노테이션은 method에만 사용가능합니다.

 

params

- PARAM에 따라 URL 매핑 여부가 결정되는 옵션

  • API URL 전달시 params에 전달한 것과 일치하는 param이 붙으면 매핑되는 방식입니다. 

 

consumes

- 클라이언트가 서버에게 보내는 데이터 타입을 명시하는 옵션

- 클라이언트에서 들어오는 HTTP Header의 형식을 지정하는 옵션

  • request의 Content-Type  request-header가 일치하는 것을 찾는 옵션입니다. 
  • 요청에 들어오는 인자값이 무엇인지에 따라 같은 URL, method여도 구분이 가능합니다. 
  • @RequestParam / @PathVariable > text/plane이 기본값으로 지정되어 있습니다.
  • @RequestBody / @ModelAttribute 는
  • HttpMessageConverter에서 객체로 변환되는 과정을 거치며
  • 기본 값으로 application/json이 지정되어 있기 때문에 특정 옵션을 줄 수 없습니다. 

 

produces 

- 서버가 클라이언트에게 반환하는 데이터 타입을 명시하는 옵션

- 클라이언트에게 반환하는 HTTP Header의 형식을 지정하는 옵션

  • 응답의 accept-request header가 특정 옵션으로 반환될 것을 지정하는 옵션입니다. 

 

@RequestMapping("/foo.do" produces="") produces 속성 사용 예시 

@ResponseBody
@RequestMapping(value = "/reply/replyList.do")
public Map<String,Object> replyList(ReplySearchVO searchVO){
    List<ReplyVO> replyList=replyService.getReplyListByParent(searchVO);
    Map<String,Object> map=new HashMap<String, Object>();
    map.put("result", true);
    map.put("data", replyList);
    map.put("size", replyList.size());
    return map;
}

 

예시 설명

더보기

 

다음 코드에서는 return 값이 map입니다.

이때 응답데이터를 받는 곳이 자바가 아니라면 브라우저(AJAX)에서 받을 것입니다.

브라우저에서는 자바를 해석할 줄 모르기 때문에 map을 받아도 사용할 수가 없습니다.

spring은 이를 알맞은 형태로 변환해서 전달하는데 produces는 이를 지정하는 옵션입니다.

따로 타입을 명시하지 않으면, "application.x-www-form-urlencoded"이 기본 Content-Type 으로 지정됩니다.

 

return 형태 및 인코딩 지정

return 하는 데이터를 xml 형태로 바꾸고 싶다거나 인코딩 방식을 지정하고 싶다면 다음과 같이 작성하면 됩니다.

@RequestMapping(value = "/reply/replyList.do", produces = MediaType.APPLICATION_XML_VALUE)
//return 값을 xml로 보내겠다.

@RequestMapping(value = "/reply/replyList.do"
, produces = "application/json;charset=UTF-8")
//return값을 json으로 보내고 인코딩은 UTF-8로 하겠다

 

반응형