1. HttpServletRequest.getParameter()
@RequestMapping("/")
public String httpExam(HttpServletRequest httpServletRequest) {
    String Exam = httpServletRequest.getParameter("Exam");

    return "httpExam";
}
  1. @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 에러가 난다.

  1. @RequestBody

@RequestBody는 post형식으로 하여야한다.

@PostMapping("/")
public String bodyExam(@ReqeustBody Body body) {
    return "bodyExam";
}
  1. @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){ ... }