-
ResponseBody
- RestController와 유사한 기능
- HTTP 메시지 바디에 return 값을 출력해줌.
RequestParam
- parameter 설정을 지원하는 어노테이션
- request.getParameter와 같은 기능을 함
- 요청 파라미터와 변수명이 같고, String, int, Integer 등 단순 타입일 시에 RequestParam을 선언하지 않아도 사용 가능
Required
- 필수 값 true or false
- Required = true여도 ''(빈문자)는 들어갈 수 있으므로 주의해야한다.
Integer와 int의 차이
- int는 기본형이기 때문에 null이 들어갈 수 없다. (대신에 '0'이 들어감)(500 예외 발생)
- Integer는 객체형이기 때문에 Null 값이 들어갈 수 있다.
DefaultValue
- 파라미터 값이 전달되지 않았을 때, 기본 값인 defaultvalue를 넘겨주는 기능(사용자가 설정)
- defaultvalue 설정 시, 사실상 required는 무의미해진다.
- 빈 문자를 넘겨준 경우에도 defaultvalue 값을 넘겨준다.
RequestParamMap
- 파라미터를 Map이나 MultiValueMap으로 사용할 수 있다.
- Map은 키 값이 하나로 확실할 때 사용
- MultiValueMap은 키 값이 여러개 일 때 사용한다.(해쉬함수)
ModelAttribute
- 실제 개발에서의 요청 파라미터를 받아서 필요한 객체를 만들고 그 객체 안에 값을 넣어줘야 하는 번거로운 과정을 생략하게 해주는 어노테이션
- 모델 객체를 자동으로 생성하고, 요청 파라미터 값도 전부 자동으로 포함시켜준다.
- 요청 파라미터 이름에 해당하는 객체의 프로퍼티를 찾고 setter를 호출해서 파라미터에 값을 입력(바인딩) 한다.
- 예를 들어) 파라미터 이름이 username이면 setUsername() 메서드를 찾고, 호출하면서 값을 입력한다.
- 참고) ModelAttribute를 생략할 수도 있다.
- @RequestParam과 어떻게 구별할까?
- @RequestParam은 String, int, Integer와 같읕 단순 타입일 때
- 나머지 = @ModelAttribute(argument resolver로 지정해둔 타입 외)(argument resolver는 HttpServletResponse와 같은 것)
lombok
- getter, setter 지원
- toString 기능 지원
- 객체를 toString으로 찍히게 해주는 기능
객체의 Property
- 여기서 프로퍼티는 set.xxx, get.xxx를 의미
단순 텍스트 요청 메시지
- InputStream으로 메시지 바디를 직접 보여줄 수 있다(바이트코드 -> String 형식으로 변환해줌).
- OutputStream 또는 Writer로 메시지 바디에 직접 출력할 수 있다.
- HttpEntity<>를 이용해서 자동으로 메시지 바디 text를 문자로 바꿔서 보여줌
- 반환(응답)도 가능(Writer기능)
- HTTP Header 또는 body를 간편하게(직접) 조회해준다.
- view 조회 x(RestController)
- RequestEntity<>로 사용 가능, ResponseEntity(응답)에는 상태 코드 삽입 가능
- @RequestBody를 이용해서 HTTP 메시지 바디를 조회할 수 있도록 해준다.(가장 많이 사용)
- 참고) header 정보가 필요하다면 Entity<>를 사용 또는 @RequestHeader 사용
- @ResponseBody를 이용해 메시지 바디에 직접 응답할 수 있다.
- Http 메시지 바디를 조회하거나 직접 응답하는 것은 당연하게도 요청 파라미터를 조회하는 @RequestParam 또는 @ModelAttribute와는 전혀 관계가 없다.(파라미터로 요청하거나 값이 저장되는 것이 전혀 아니기 때문)
InputStream
- 바이트코드로 넘어가기 때문에 문자 변환 형식을 지정해줘야한다(UTF-8과 같은)(지정하지 않을 경우 기본 값으로 변환됨(권장 x))
요청 파라미터 vs HTTP 메시지 바디
- 요청 파라미터를 조회하는 기능 : @RequestParam, @ModelAttirbute
- HTTP 메시지 바디를 직접 조회하는 기능 @RequestBody
RequestBody
- @RequestBody에 직접 만든 객체를 지정할 수 있다.
- HTTP 메시지 컨버터가 HTTP 메시지 바디의 내용을 우리가 원하는 문자나 객체로 변환해준다.
- HTTP 메시지 컨버터는 문자 뿐만 아니라 JSON도 객체로 변환해준다.(맵핑해주는 과정 생략해줌)
- 생략 x(생략은 @RequestParam 또는 @ModelAttribute만 가능하다.)
- 이때 생성(지정)된 객체는 응답에도 데이터 형식으로(json) 반환 가능(HTTP 메시지 컨버터 사용)
- 정리) @RequestBody 요청
- Json 요청 -> HTTP 메시지 컨버터(josn을 처리하는, Accept : application/json) -> 객체
- @ResponseBody 응답
- 객체 -> HTTP 메시지 컨버터 -> Json 응답
GET, POST, HTTP API차이
- GET과 POST는 요청 파라미터를 통해 값을 조회하거나 저장하는데 반면,
- HTTP API는 메시지 바디에 데이터를 요청하거나 응답받는 방식이므로 어노테이션 사용이 다르다.
- GET과 POST는 @RequestParam 또는 @ModelAttribute를 사용
- HTTP API는 @RequestBody 또는 @ResponseBody 사용 (HttpEntity도 사용 가능)
Generic이란
- 특정 타입을 지정하지 않고 외부에서 지정하는 타입을 자동 지정해주는 기능
- 때문에 관리하기가 편하다.