Controller 클래스
- 클라이언트 요청을 처리할 서버 애플리케이션의 기능들을 구현한 클래스
- @RestController
- Spring MVC에서는 특정 클래스에 @RestController를 추가하면 해당 클래스가 REST API의 리소스를 처리하기 위한 API 엔드포인트로 동작함을 정의
- @RestController가 추가된 클래스는 애플리케이션 로딩 시, Spring Bean으로 등록
- @RequestMapping
- 클라이언트의 요청과 클라이언트 요청을 처리하는 핸들러 메서드를 매핑해주는 역할
- 클래스 레벨에 추가하여, 클래스 전체에 사용되는 공통 URL(Base URL)을 설정 가능
- produces : 응답 데이터를 어떤 미디어 타입으로 클라이언트에게 전송할지 설정 (Attribute)
- @GetMapping
- 클라이언트가 서버에 리소스를 조회할 때 사용
- @PostMapping
- 클라이언트의 요청 데이터(Request Body)를 서버에 생성할 때 사용
- @PathVariable
- 핸들러 메서드의 파라미터 종류 중 하나
- 매핑 URI의 문자열과 동일해야 함
- @RequestParam
- 핸들러 메서드의 파라미터 종류 중 하나
- 지정한 파라미터 값을 Request Body에 실어서 요청할 수 있게 함
- 핸들러 메서드의 리턴 값으로 Map 객체를 이용하면, Spring MVC 내부적으로 JSON 형식의 데이터를 생성
- ResponseEntity를 이용하면 응답 데이터를 좀 더 세련된 형태로 만들어줌 (HttpStatus 이용 가능)
DTO(Data Transfer Object) 클래스
- 핸들러 메서드에 파라미터로 추가되는 @RequestParam의 개수가 늘어나는 것을 DTO 클래스가 요청 데이터를 하나의 객체로 전달 받는 역할을 해줌으로써, 간결함을 유지할 수 있다.
- 핸들러 메서드 내부에 있는 유효성 검사 로직을 DTO 클래스에 구현함으로써, 간결함을 유지할 수 있다.
- DTO 클래스를 적용함으로써, Controller에 적어주는 애너테이션
- @RequestBody
- JSON 형식의 Request Body를 DTO 클래스의 객체로 변환시켜주는 역할 (역직렬화)
- @ResponseBody
- DTO 클래스의 객체를 Response Body로 변환시켜주는 역할 (직렬화)
- 핸들러 메서드의 리턴 값이 ResponseEntity일 경우 또한 직렬화해줌 (둘 중 하나 사용하면 됨)
- @RequestBody
- 단점
- Controller 클래스가 늘어남에 따라, DTO 클래스가 2배씩 늘어남(postDto, patchDto)
- 유효성 검증(Validation)
- DTO 클래스에 적용
- @NotBlank
- null 값, 공백(""), 스페이스(" ") 같은 값들을 모두 허용하지 않음
- @Pattern
- 정규 표현식에 매치되는 유효한 문자인지 검증
- @Range
- 범위 내의 수인지 검증
- @PathVariable에 대한 유효성 검증
- 클래스 레벨에 @Validated 애너테이션 반드시 추가
- @Min
- @Max
- @Positive
- Custom Vaildator
심화
- RESTful API의 URI 작성 규칙 https://itvillage.tistory.com/35
- @SpringBootApplication 의 역할 https://itvillage.tistory.com/36
- Spring Boot 애플리케이션의 부트스트랩(Bootstrap) 과정 https://itvillage.tistory.com/37
- HTTP 헤더(Header) 더 알아보기 https://developer.mozilla.org/ko/docs/Web/HTTP/Headers
- HttpServletRequest API Docs https://docs.oracle.com/javaee/7/api/index.html?javax/servlet/http/HttpServletRequest.html
- HttpServletResponse API Docs https://docs.oracle.com/javaee/7/api/index.html?javax/servlet/http/HttpServletResponse.html
- URI scheme 목록 https://en.wikipedia.org/wiki/List_of_URI_schemes
- Percent Encoding https://ko.wikipedia.org/wiki/퍼센트_인코딩
- HttpMessageConverter 관련 자료 https://itvillage.tistory.com/46
- Java Bean 관련 자료 https://ko.wikipedia.org/wiki/자바빈즈
'Develop > Spring' 카테고리의 다른 글
Spring MVC - Testing(1) (0) | 2022.11.08 |
---|---|
JPA(Java Persistence API)와 엔티티 매핑(Entity Mapping) (0) | 2022.11.01 |
GET, POST 메서드 요청 시, DTO 객체에는 setter가 필요한가? (0) | 2022.10.23 |
Spring MVC 요청 및 응답 동작 과정 (0) | 2022.10.21 |
Assert.assertTrue(); 안됨 해결 (0) | 2022.07.28 |