요청의 파라미터를 연결할 매개변수에 사용
//@RequestParam 어노테이션을 붙이지 않은 경우
@RequestMapping("/requestParam")
//public String main(@RequestParam(name="year", required=false) String year) { //아래와 같음
public String main(String year) { // year의 값이 없어도 됨
//http://localhost/ch2/requestParam -> year = null
//http://localhost/ch2/requestParam?year -> year = ""
...
}
//@RequestParam만 붙인 경우
@RequestMapping("/requestParam")
//public String main(@RequestParam(name="year", required=true) String year) { //아래와 같음
public String main(@RequesetParam String year) { // year가 필수적으로 있어야됨
//http://localhost/ch2/requestParam -> 400 Bad Request!!
//http://localhost/ch2/requestParam?year -> year = ""
...
}
//@RequestParam(required=false)
@RequestMapping("/requestParam")
public String main(@RequesetParam(required=false) int year) {
//http://localhost/ch2/requestParam -> 500 IllegalStateException
//null값이 들어오는데 그걸 int로 변환하지 못해 발생하는 서버 오류
//http://localhost/ch2/requestParam?year -> 400 Bad Request
//year의 값을 정수로 변환이 불가능한 empty string으로 전달해 발생
...
}
//@RequesetParam(required=true)
@RequestMapping("/requestParam")
public String main(@RequesetParam(required=true) int year) {
//http://localhost/ch2/requestParam -> 400 Bad Request
//http://localhost/ch2/requestParam?year -> 400 Bad Request
...
}
//@RequesetParam(required=false, defaultValue="1")
@RequestMapping("/requestParam")
public String main(@RequesetParam(required=false, defaultValue="1") int year) {
//http://localhost/ch2/requestParam -> year = 1
//http://localhost/ch2/requestParam?year -> year = 1
...
}
잘못된 요청이 들어왔을때 에러메세지를 그대로 띄우는건 적절치 못함 -> @ExceptionHandler 를 통해 처리
@ExceptionHandler(Exception.class)
public String catcher(Exception ex){
return "yoilError";
}
public String main(int year, int month, int day, Model model)
를
public String main(MyDate date, Model model)
로 변환해 매개변수를 받아올 수 있다!
setter를 통해 값을 저장되기 때문에 setter가 없다면 매개변수 저장 불가
적용 대상을 Model의 속성으로 자동 추가
반환 타입이나 메서드의 매개변수에 적용 가능
@RequestMapping("/getYoil")
//public String main(@ModelAttribute("myDate") MyDate date, Model m) { // 아래와 동일
public String main(@ModelAttribute MyDate date, Model m) {
...
char yoil = getYoil(date);
//m.addAttribute("myDate",date); 어노테이션에 의해 이미 수행됨
m.addAttribute("yoil",yoil);
...
컨트롤러 매개변수가 참조형이라면 앞에 @ModelAttribute가 생략된 것
Spring 4.3 이후 버전부터 사용 가능
// @RequestMapping(value="/register/add", method=RequestMethod.GET)
@GetMapping("/ergiser/add") //위와 동일
public String register() {
return "registerForm";
}
// @RequestMapping(value="register/save", method=RequestMethod.POST)
@PostMapping("register/save") //위와 동일
public String save() {
return "registerInfo";
}
servlet-context.xml에 <view-controller path="..." view-name="..." />
태그를 추가해 대체 가능 (GetMethod만 지원)
한 클래스 내에서 매서드에 매핑되는 URL의 공통 부분을 @RequestMapping 으로 클래스에 적용
@Controller
@RequestMapping("/register") //공통 부분을 클래스에 어노테이션으로 적용
public class RegisterController {
@GetMapping("/add")
public String register(){
...
}
@PostMapping("/add")
public String save(User user, Model m) throws Exception{
...
}
}
종류 | URL pattern | 매핑 URL |
---|---|---|
exact mapping | /login/hello.do | http://localhost/ch2/login/hello.d |
path mapping | /login/* | http://localhost/ch2/login/에 속한 모든 URL |
extension mapping | *.do | do 확장자로 모든 끝나는 경로 |