@Service
@Args ~ ~ ~
@NoArgs ~~~~
= 메인 클래스 애너테이션 =
@SpringBootApplication
1. 자동 구성 활성화
2. 애플리케이션 패키지 내 @Component가 붙은 클래스를 검색 후 Spring Bean으로 등록하는 기능 활성화
3. @Configuration 붙은 클래스 자동으로 찾고, 추가적으로 Spring Bean으로 등록 활성화
=파라미터 레벨 =
@Valid : DTO 객체를 활용하여 유효성 검증 적용하겠다는 애너테이션.
@Min(정수) : 뒤에 오는 long memberId 변수에 1이상의 숫자라는 제약 조건.
@RestController
@RequestMapping("/v1/members")
@Validated // (1)
public class MemberController {
...
...
@PatchMapping("/{member-id}")
public ResponseEntity patchMember(@PathVariable("member-id") @Min(1) long memberId,
@Valid @RequestBody MemberPatchDto memberPatchDto) {
memberPatchDto.setMemberId(memberId);
// No need Business logic
return new ResponseEntity<>(memberPatchDto, HttpStatus.OK);
}
}
@Max(정수)
@PathVariable()
클라이언트의 HTTP Method URI 에 패턴 형식으로 지정된 변수의 값을 파라미터로 받을 수 있다.
()안의 내용은 메소드 레벨 애너테이션 @GetMapping의 uri와 동일한 문자열이여야 한다.
코드 사용 방법 : (@애너테이션("멤버변수명(단어사이-추가)") 데이터타입 멤버변수명){
@GetMapping("/{order-id}")
public String getOrder(@PathVariable("order-id") long orderId) {
System.out.println("# orderId: " + orderId);
// not implementation
return null;
위의 @PathVariable()으로 추가된 변수에 유효성 검증이 정상적으로 적용되게 하려면
Controller 클래스에 @Validated 애너테이션이 추가되야 한다.
@RequestParam * : 핸들러 메서드 파라미터 레벨 애너테이션,
코드 사용 방법 : (@애너테이션(“멤버_변수명”) 메서드에_필요한_변수타입 변수명) {
@RequestHeader("user-agent") String userAgent,//(1)
@RequestParam("korName") String korName
@RequestHeader : 헤드 정보만 읽는 애너테이션.
A : 특정 헤더 정보만 읽기 : 애너테이션 뒤 (“멤버_변수명(단어사이-추가)”) (데이터타입 멤버_변수명)
@RestController
@RequestMapping(path = "/v1/coffees")
public class CoffeeController {
@PostMapping
public ResponseEntity postCoffee(@RequestHeader("user-agent") String userAgent,//(1)
B : 전체 헤더 정보를 map에 담아 읽기 : 애너테이션 뒤 Map <타입, 타입> Map_변수명,
@RestController
@RequestMapping(path = "/v1/members")
public class MemberController {
@PostMapping
public ResponseEntity postMember(@RequestHeader Map<String, String> headers
@RequestBody : JSON 형식의 Request Body(HTTP 요청 데이터)를
핸들러 메서드의 파라미터로 @RequestParam(멤버 변수)가 아닌 MembersPostDto 클래스의 객체로 변환하는 역할
= 클라이언트쪽에서 전송하는 Request Body(HTTP 메소드 내용이) 반드시 JSON 형식이어야 작동되는 코드
@ResponseBody : JSON 형식의 Response Body(HTTP 요청 데이터)를 클라이언트에게 전달하기 위해
DTO 객체를 Response Body로 변환하는 역할. Spriong MVC에서는 @ResponseBody를 붙이거나,
핸들러 메서드의 리턴 객체 타입이 ResponseEntity 일 경우,
내부적으로 DTO 클래스의 객체를 JSON 으로 바꿔줌.
=Controller 클래스 레벨=
@RestController :
해당 클래스가 REST API의 리소스 처리를 위한 API 엔드포인트로 동작함을 정의
앱 로딩시 해당 클래스 Spring Bean 등록.
@RequestMapping
클라이언트의 요청과 클라이언트 요청을 처리하는 핸들러 메서드를 매핑해주는 역할.
클래스 전체에 사용되는 공통 URL 설정.
@Validated
=Service 클래스 레벨 애너테이션=
@Service
Serivce 클래스를 Spring Bean으로 등록
=메소드 파라미터 안 변수들에 적용하는 레벨 =
@Getter
@Setter
=메소드 레벨=
@GetMapping
@PostMapping
@PatchMapping
@DeleteMapping
=DTO 객체 필드 변수 레벨=
@NotBlank (String에 한해서)
@NotSpace
@Pattern
*핸들러 메서드 : 클라이언트의 요청을 처리하기 위한 Controller 클래스의 메서드
<정규표현식>
1. ‘^’은 문자열의 시작을 의미합니다.
2. ‘$’는 문자열의 끝을 의미합니다.
3. ‘*’는 ‘*’ 앞에 평가할 대상이 0개 또는 1개 이상인지를 평가합니다.
4. ‘\s’는 공백 문자열을 의미합니다.
5. ‘\S’ 공백 문자열이 아닌 나머지 문자열을 의미합니다.
6. ‘?’는 ‘?’ 앞에 평가할 대상이 0개 또는 1개인지를 의미합니다.
7. ‘+’는 ‘+’ 앞에 평가할 대상이 1개인지를 의미합니다.
8. “^\\S+(\\s?\\S+)*$”를 정규 표현식으로 추가하면
아래 예시의 문자열은 유효성 검증에 실패합니다.

'백엔드 학습 과정 > Section 3 [Spring MVC, JDBC, JPA, RestDo' 카테고리의 다른 글
#3. Spring 예외 처리 (0) | 2022.12.23 |
---|---|
#2. Spring MVC [Service 계층] - 역할, 생성, 적용, 필요 애너테이션 (0) | 2022.12.20 |
** 참고 ** REST-API (0) | 2022.12.17 |
#1-1. Rest Client (0) | 2022.12.17 |
#1. Spring MVC [API 계층] (0) | 2022.12.17 |