- HttpServletRequest.getParameter()
@RequestMapping("/")
public String httpExam(HttpServletRequest httpServletRequest) {
String Exam = httpServletRequest.getParameter("Exam");
return "httpExam";
}
- @RequestParam
@PostMapping("/join")
public String join(@RequestParam(name = "name") String name,
@RequestParam(name = "nickname") String nickname,
@RequestParam(name = "email") String email,
@RequestParam(name = "passwd") String passwd,
@RequestHeader(name = "Accept") String accept,
HttpSession session)
파라미터를 사용하지않으면 400 에러가 난다.
- @RequestBody
@RequestBody는 post형식으로 하여야한다.
@PostMapping("/")
public String bodyExam(@ReqeustBody Body body) {
return "bodyExam";
}
- @ModelAttribute
요청 파라미터를 받을때 1:1 의 경우 @RequestParam, 도메인 오브젝트나, DTO의 프로퍼티에 요청 파라미터를 바인딩해서 한번에 받을땐 @ModelAttribute를 사용할 수 있다.
두개이상의 요청처리 메서드에서 공통으로 사용되는 모델 객체를 생성할 수 있다.
또한 이 @를 사용하면 검증작업을 할수 있는데 각 멤버변수마다 @valid옵션을 줄수가 있고 검증(Validatioin) 작업이 추가적으로 진행된다. 예로 int 타입의 변수에 String 타입의 값을 넣을려고 할때 @ModelAttribute는 요청 파라미터를 타입변환을 시도한다. 만약 타입변환이 실패해 에러가 날 시 BindException이 발생한다.
이 예제를
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String parameter1 = request.getParameter("parameter1");
String parameter2 = request.getParameter("parameter2");
String parameter3 = request.getParameter("parameter3");
String parameter4 = request.getParameter("parameter4");
...
}
이렇게 줄일 수 있다.
@RequestMapping(value="/", method=RequestMethod.GET)
public String modelExam(@ModelAttribute Exam exam) {
...
} // 생략가능
- @ModelAttribute는 컨트롤러가 리턴하는 모델에 파라미터로 전달한 오브젝트를 자동으로 추가.
모델의 이름은 기본적으로 파라미터 타입의 이름을 따른다.
ExamDto 클래스라면 examDto라는 이름의 모델로 등록된다. (다른이름 지정가능)
public save(@ModelAttribute("Exam")
ExamDto examDto){ ... }