본문 바로가기
Spring

[스프링MVC] @RequestMapping 어노테이션 총 정리

by 코플+ 2023. 5. 23.

1. 요청 경로 매핑

@RequestMapping(value = "/경로명")
- 요청 경로는 반드시 실정해야 하는 필수 정보이다.
- 속성이 하나일 때는 속성명을 생략할 수 있다.
- 컨트롤러의 클래스 레벨과 메서드 레벨로 지정할 수 있다.
- 클래스 레벨로 요청 경로를 지정한 메소드 레벨에서 지정한 경로의 기본 경로로 취급된다.
- 클래스 레벨의 요정 경로에 메소드 레벨의 요정 경로를 덧붙인 형태가 최종 경로가 된다.
	@RequestMapping(value = "/register")
	private void registerFrom() {
		logger.info("registerForm() 실행...!");
	}

 

 

2. 경로 패턴 매핑

URL 경로의 일부를 파라미터로 사용할 때 이용

@RequestMapping(value = "/경로명/{경로변수명}")
public String (@PathVariable("경로변수명") int 변수명) {}

 

URL 경로상의 변하는 값을 경로 변수로 취급한다.
경로 변수에 해당하는 값을 파라미터 변수에 설정할 수 있다.
	@RequestMapping(value = "/read/{boardNo}")
	public String read(@PathVariable("boardNo") int boardNo) {
		logger.info("read() 실행...!");
		logger.info("read boardNo: " + boardNo);
		return "board/read";
	}

 

3. HTTP 메소드 매핑

@RequestMapping(value = "/formHome", method = RequestMethod.GET)
method 속성을 사용하여  HTTP 메서드를 매핑 조건으로 지정할 수 있다.
화면으로 응답하는 경우에는 HTTP 메서드로 GET방식과 POST방식 두 가지를 사용할 수 있다.
@RequestMapping(value = "/formHome", method = RequestMethod.GET)
public String formHome() {
	return "formHome";

 

 

4. Params 매핑

@RequestMapping(value = "/get", method = RequestMethod.GET, params = "register")
요청 파라미터를 매핑 조건으로 지정하는 경우에는 params 속성을 사용한다.
버튼이나 링크에 따라 호출할 메서드를 바꿔야 할 때 사용한다.
@RequestMapping(value = "/get", method = RequestMethod.GET, params = "register")
public String registerFormParamsGet() {
	logger.info("registerFormParamsGet() 실행...!");
	return "board/register";
}

 

5. Headers  매핑

@RequestMapping(value = "/{boardNo}", method = RequestMethod.PUT, headers = "X-HTTP-Method-Override=PUT")

요청 헤더를 매핑 조건으로 지정하는 경우에는 headers 속성을 사용한다.

@RequestMapping(value = "/{boardNo}", method = RequestMethod.PUT, headers = "X-HTTP-Method-Override=PUT")
public ResponseEntity<String> modifyByHeader(
		@PathVariable("boardNo") int boardNo, @RequestBody Board board){
	log.info("modifyByHeader() 실행...!");
	log.info("boardNo : " + boardNo);
	log.info("title : " + board.getTitle());
	ResponseEntity<String> entity = new ResponseEntity<String>("SUCCESS", HttpStatus.OK);
	return entity;
}

 

6. Content Type 매핑 (consumes)

@RequestMapping(value = "/{boardNo}", method = RequestMethod.PUT, consumes = "application/json")

응답 상태코드와 값을 제네릭에 설정되어 있는 타입에 따라서 내 마음대로 내보낼 수 있다.
응답 상태코드 : HttpStatus라는 객체 안에 잇는 여러 상태 코드를 선택해서 내보낼 수 있다.
결과값 : 제네릭 타입에 설정되어 잇는 해당 타입의 값으로 결과의 값을 설정해서 내보낼 수 있다.

@RequestMapping(value = "/{boardNo}", method = RequestMethod.PUT, consumes = "application/json")
public ResponseEntity<String> modifyByJson(
		@PathVariable("boardNo") int boardNo, @RequestBody Board board){
	log.info("modifyByJson() 실행...!");
	ResponseEntity<String> entity = new ResponseEntity<String>("SUCCESS", HttpStatus.OK);
	return entity;
}

위 와같이 Controller를 작성하고 아래와 같이 Ajax를 시도한다.

contentType :  "application/json; charset=utf-8"를 지정하고 보내줘야 해당 메소드가 실행된다.

$.ajax({
	type : "put",
	url : "/board/" + boardNo,
	data : JSON.stringify(boardObject),
	contentType : "application/json; charset=utf-8",
	success : function(result) {
		console.log(result);
		if(result === "SUCCESS") {
			alert(result);
		}
	}
});

 

7. Accept 매핑 사용 (header 사용)

@RequestMapping(value = "/{boardNo}", produces = "application/json")

produces 속성값을  지정해서 요청하는 미디어 타입을 처리한다.

@RequestMapping(value = "/{boardNo}", method = RequestMethod.GET, produces = "application/json")
public ResponseEntity<Board> readToJson(@PathVariable("boardNo") int boardNo){
	log.info("readToJson() 실행....!");
	
	String addStr = "_json";
	
	Board board = new Board();
	board.setTitle("제목1" + addStr);
	board.setContent("내용1"  + addStr);
	board.setWriter("작성자1" + addStr);
	
	ResponseEntity<Board> entity = new ResponseEntity<Board>(board, HttpStatus.OK);
	return entity;
		
}

아래와 같이 headers에 accept를 담아서 전송한다.

$.ajax({
	type : "get",
	url : "/board/" + boardNo,
	headers : {
		"Accept" : "application/xml"
	},
	success : function(result){
		console.log(result);
		alert(xmlToString(result));
	}
})

 

 

기타 속성

consumes = "application/json"

해당 type으로만 값을 받아온다.

 

produces = "application/json"

response를 해당 속성으로 해준다.

댓글