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를 해당 속성으로 해준다.
'Spring' 카테고리의 다른 글
[스프링Legacy] Mybatis 프레임워크 초기설정 (0) | 2023.06.01 |
---|---|
[스프링MVC] Form타입 Fileupload 방법 (commons-fileupload) (0) | 2023.05.24 |
[스프링MVC] Controller의 기본 .jsp 단축경로 설정하기 servlet-context.xml (0) | 2023.05.23 |
[스프링프레임워크] 400에러 해결방법 (국비학원,공공SI) (0) | 2023.05.20 |
[JSP/JSTL] 가끔 발생하는 500에러 (TLD 또는 태그 파일 내의 attribute 지시어에 의하면, 속성 [items]은(는) 어떤 표현식도 받아들이지 않습니다.) (0) | 2023.04.13 |
댓글