(웹브라우저 주소창에 입력 및 실행되면)
이를 처리할 서버측 .java 와 method 를 할당하는 것.
크게 3가지인데,
A. RequestMapping 이 기본
B. RequestMapping 간소화
C. Annotation 파라미터
1. 요청 경로 매핑, RequestMapping
메소드가 void 리턴이면 @RequestMapping path 값과 동일한 view 파일 호출,
메소드가 String 리턴이면 String 값과 동일한 view 파일 호출.
매핑 관련해서는 RequestMapping 이 기본이고, 다른 매핑은 이를 간소화.
2. 경로 패턴 매핑
RequestMapping 시 파라미터 1개?
URL 경로 상의 변하는 값을 경로 변수로 취급.
3. Http 메서드 매핑
@GetMapping 과 @PostMapping
@PutMapping (Rest Ajax 용도)
@DeleteMapping
@PatchMapping
4. Params 매핑
버튼이나 링크를 매핑시, @GetMapping 이나 @PostMapping 에 params 인자 사용
5. Headers 매핑
요청 헤더를 매핑시, @PutMapping 에 headers 인자 사용
6. ContentType 매핑
Content-Type 을 매핑시, @PutMapping 에 consumes 인자 사용
7. Accept 매핑
Accept 헤더값을 매핑시, @GetMapping 에 produces 인자 사용
* RequestMapping 이나 Http 메서드 매핑이나..
return 으로 View 를 호출할 때는 절대 경로를 세팅해야 에러나지 않음.
다만 '/aaa/bbb' 형태가 아니라, 'aaa/bbb' 형태.
RequestMapping 으로 기본 경로가 바뀐 것이 아니기 때문..?
@RequestMapping 이 class 에 지정되지 않은 경우,
메소드 수준에서는 아래와 같이 세팅.
- @RequestMapping(value="/aaa/bbb")
value={"/aaa/bbb", "/bbb/ccc", ...} 도 가능
- @RequestMapping(path="/aaa/bbb")
value 와 path 는 동등하게 사용
- @RequestMapping("/aaa/bbb")
값이 하나인 경우, 속성명 생략
@RequestMapping 이 class 에 지정되는 경우,
메소드 수준에서는 class 에 지정된 이후의 경로를 설정
- @RequestMapping(value="/aaa")
라고 class 에 세팅했으면,
- @RequestMapping(value="/bbb")
라고 method 에 세팅
- class 에서 @RequestMapping 기본 경로 설정후,
메소드에서 @GetMapping 이나 @PostMapping 등을 사용하여 이후의 경로 설정 가능
@RequestMapping("/aaa") // classA 의 모든 method 에서 매핑시 root 로 작용
class classA {
@RequestMapping("/bbb") // 실제로는 /aaa/bbb 에 해당
public String methodA(...){
...
return "ccc"; // /aaa/ccc.html 이 아니고, /ccc.html 에 해당
//aaa/ccc.html 을 찾으려면, return "aaa/ccc"; 라고 해야 함
}
}
@RequestMapping("/aaa/{param})
public String method(@PathVariable int param)
또는 아래와 같이 명칭을 변경
@RequestMapping("/aaa/{param})
public String method(@PathVariable("param") int idx)
<form th:action="@{/aaa/bbb}">
<input type="submit" value="클릭">
</form>
(form 태그에 method 속성을 주입하지 않으면 get type)
(class 에 @RequestMapping("/aaa") 세팅되어 있다고 전제)
@RequestMapping(path="/bbb", method=RequestMethod.GET)
또는
@GetMapping("/bbb")
<form th:action="@{/aaa/bbb}" method="post">
<input type="submit" value="클릭">
</form>
@RequestMapping(path="/bbb", method=RequestMethod.POST)
또는
@PostMapping("/bbb")
@GetMapping("/register") public methodA(...){ ... } 는 등록 화면 호출용으로 사용,
@PostMapping("/register") public methodB(...){ ... } 는 등록 화면의 내용을 전달받아 DB 처리용으로 사용.
<a th:href="@{/aaa/bbb?파라미터}">클릭</a>
또는
<form th:action="@{/aaa/bbb}">
<button type="submit" name="파라미터">클릭</button>
</form>
@GetMapping(path="/bbb", params="파라미터")
<form th:action="@{/aaa/bbb}" method="post">
<button type="submit" name="파라미터">클릭</button>
</form>
@PostMapping(path="/bbb", params="파라미터")
bbb 를 하나로 두고, 실제 경로를 노출하지 않을 수 있음.
params 로 파라미터를 넘기는 방법은,
form 태그(get 과 post) 와 ? 를 이용하는 파라미터 전달 방식 모두 가능.
$.ajax({
type:'put', // -- @PutMapping
url:'/aaa/'+boardNoVal
headers:{ 'X-HTTP-Method-Override':'PUT' },
contentType:'application/json; charset=utf-8",
...
});
@PutMapping(path="/{boardNo}", headers="X-HTTP-Method-Override=PUT")
var boardObject = { boardNo:'1', ... };
$.ajax 에 type:'post', url:'/aaa/'+boardNoVal, data:JSON.stringify(boardObject), contentType:'application/json; charset=utf-8'
@PostMapping("/{boardNo}")
public ResponseEntity<String> methodA(
@PathVariable("boardNo") int boardNo,
@RequestBody Board board){
....
ResponseEntity<String> entity = new ResponseEntity<String>("결과값",HttpStatus.OK);
return entiry;
}
var boardObject = { boardNo:'1', ... };
$.ajax 에 type:'put', url:'/aaa/'+boardNoVal, data:JSON.stringify(boardObject), contentType:'application/json; charset=utf-8'
@PutMapping(path="/{boardNo}", consumes="application/json")
var xmlData = '<Board><boardNo>1</boardNo>...</Board>';
$.ajax 에 type='put', url:'/aaa/'+boardNoVal, data:xmlData, contentType:'application/xml; charset=utf-8'
@PutMapping(path="/{boardNo}", consumes="application/xml")
$.get('/aaa/' +boardNoVal, function(data){
alert(JSON.stringify(data));
}
@GetMapping(path="/{boardNo}", produces="application/xml")
public ResponseEntity<Board> readToXml(
@PathVariable("boardNo") int boardNo){
Board board = new Board(..,..,....);
ResponseEntity<Board> entity = new ResponseEntity<Board>(board, HttpStatus.OK);
return endtity;
}
- $.get 은 @GetMapping 만 사용. @PostMapping 은 에러 발생.
$.ajax({
type:'get',
url:'/aaa/'+boardNoVal,
headers:{ 'Accept':'application/json' },
success:function(result){
alert(JSON.stringify(result));
}
});
@GetMapping(path="/{boardNo}", produces="application/json")
$.ajax 에 type:'get', headers:{ 'Accept':'application/xml' }, success:function(result){ alert(xmlToString(result)) }
function xmlToString(xmlData){
return window.ActiveXObject ? xmlsData.xml : (new XMLSerializer()).serializeToString(xmlData);
}
@GetMapping("/{boardNo}")
'Server Oriented > Spring' 카테고리의 다른 글
스프링 Controller Step 2, request 파라미터 수용(매핑시) (0) | 2022.09.30 |
---|---|
스프링 Controller Step 3, response 할당(View, RESTful) (1) | 2022.09.30 |
스프링 Lombok Annotations, @Getter @Setter @ToString (0) | 2022.09.27 |
스프링 Annotation 속성 설정 (0) | 2022.09.27 |
스프링 예외처리 (0) | 2022.09.08 |