Step by Step

240517 본문

Spring

240517

짤진이 2024. 5. 17. 13:01
반응형

2) DTO => Entity : Controller에서 변환한다면? => DTO로 옮긴다

[고려 사항]

  • (1) 다른 사람이 봐도 변환한다는 의미의 convertToEntity 메소드명 생성
  • (2) Entity는 원본이니까 지켜줘야한다
  • (3) DTO or Entity로 옮긴다면 필드가 있는 곳으로 옮기는 건 어떤지

Spring Valiadation(@Valid)

build.gradle에 아래 dependency를 추가해줘야 @Validated와 @Valid를 사용할 수 있다.

// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-validation', version: '3.2.5'

 

Valid vs Validated

Valid와 같은 경우는 request body일때 사용한다.

  • @Email: Email 형식인지 확인
  • @NotBlank: null , 공백을 허용하지 않음
  • @Size: 길이를 제한할때 사용(min: 최소 , max: 최대)
  • @max: 지정한 값 이하인지
  • @min: 지정한 값 이상인지
@NotBlank
@Size(min = 1, max = 15, message = "아이디는 1 ~ 15자 이여야 합니다!")
private String userId;
/**
 * Member의 비밀번호 정보
 */
@NotBlank
@Size(min = 1, max = 15, message = "비밀번호는 1 ~ 15자 이여야 합니다!")
private String pw;
/**
 * Member의 실제 이름 정보
 */

@NotBlank
@Size(min = 1, max = 10, message = "이름은 1 ~ 10자 이여야 합니다!")
private String name;
/**
 * Member의 이메일 정보
 */
@Email
@Size(min = 1, max = 10, message = "이메일은 1 ~ 10자 이여야 합니다!")
private String email;
/**
 * Member의 전화번호
 */
@NotBlank
@Size(min = 12, max = 13, message = "전화번호는 12 ~ 13자 이여야 합니다!")
private String contact;

 

Validated와 같은 경우는 쿼리 스트링이나 파라미터를 검증해야 할 때 사용한다.

 

@RestController
@RequestMapping("/users")
@Validated
public class UserController {
    .
    .
    
    @GetMapping("/{id}")
    public String find(@PathVariable @Min(1)  Long id) {
        return "ok";
    }
}

 

@Valid한 값이 들어오지 않을 때(Bad Request가 발생할 때) => 유효성 검사를 할 때

아래 코드를 사용해 에러메세지를 띄워준다.

@PostMapping("/join/api/result") // After
    public ApiUtils.ApiResult<String> joinByApiResult(@Valid @RequestBody MemberDto memberDto, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return error(bindingResult.getAllErrors().toString(), HttpStatus.BAD_REQUEST);
        }


        if (Validator.isAlpha(memberDto.getName())) {
            // 유저 이름을 log로 출력
            log.info(memberDto.toString());

            // ID 중복 체크
            // 중복이면 사용자 예외 클래스 소환
            //      1) 예외 클래스한테 니가 return 해!
            //      2) 예외만 발생 시키고.. 메세지는 내가 보낼게
            if (isDuplicateId(memberDto)) {
                return error("아이디 중복", HttpStatus.CONFLICT);
            }

            Member requestMember = memberDto.convertToEntity();

            // Repository에 저장 시도
            String userId = memberService.join(requestMember);

//        
    {
//	                "success" : True,
//	                "response" : 응답 데이터(객체),
//	                "error" : null
//            }

            try {
                log.info(userId);
            } catch (NullPointerException e) {
                return success(userId);
            }
            return success(userId);
        } else
            return error("아이디 숫자 포함", HttpStatus.BAD_REQUEST);
    }
반응형

'Spring' 카테고리의 다른 글

240527  (0) 2024.05.27
240520  (0) 2024.05.21
240516  (0) 2024.05.17
240513(@JsonNaming, @JsonProperty)  (0) 2024.05.13
Log의 종류 & 리팩토링(?)  (0) 2024.05.09