마지막 단계를 시도해 봤다.
9단계 기능: `null 체크` 및 `특정 패턴`에 대한 검증 수행 ------------------------------------------------------- 🔻 설명 - 유효성 검사 - 잘못된 입력이나 요청을 미리 방지할 수 있습니다. - 데이터의 무결성을 보장하고 애플리케이션의 예측 가능성을 높여줍니다. - Spring에서 제공하는 @Valid 어노테이션을 이용할 수 있습니다. ------------------------------------------------------- 🔻 조건 - 할일은 최대 200자 이내로 제한, 필수값 처리 - 비밀번호는 필수값 처리 - 담당자의 이메일 정보가 형식에 맞는지 확인 -------------------------------------------------------
여기서 @Valid가 무엇인지 한 번 검색했다.
------------------------------------------------------- 🔻 @Valid란? - Java의 Bean Validation API(JSR 380)를 활용하여 객체의 유효성을 검사하는 데 사용되는 애너테이션 - @NotNull, @Size, @Min, @Max 같은 제약 조건 애너테이션을 사용 -------------------------------------------------------
나는 Groovy를 사용하므로 먼저 build.gradle에 있는 dependencies에 이것을 추가해야 한다.
implementation 'org.springframework.boot:spring-boot-starter-validation'
이제는 코드를 수정해야한다.
1. ManagerRequestDto.java
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class ManagerRequestDto {
@NotBlank(message = "담당자 이름은 필수값이어야 합니다.")
private String name;
@NotBlank(message = "이메일은 필수값이어야 합니다.")
@Email(message = "이메일은 유효한 형식이어야 합니다.")
private String email;
public ManagerRequestDto(String name, String email) {
this.name = name;
this.email = email;
}
}
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class MyScheduleRequestDto {
@NotBlank(message = "할 일은 필수값")
@Size(max = 200, message = "할 일은 최대 200자로 입력")
private String task;
@NotNull(message = "담당자 ID는 필수값")
private Long managerId;
@NotBlank(message = "비밀번호는 필수값")
private String password;
public MyScheduleRequestDto(String task, Long managerId, String password) {
this.task = task;
this.managerId = managerId;
this.password = password;
}
}
import com.sparta.myscheduleserver.dto.MyScheduleRequestDto;
import com.sparta.myscheduleserver.dto.MyScheduleResponseDto;
import com.sparta.myscheduleserver.service.MyScheduleService;
import jakarta.validation.Valid;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api")
@Validated
public class MyScheduleServerController {
private final JdbcTemplate jdbcTemplate;
public MyScheduleServerController(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
// 일정 생성
@PostMapping("/schedules")
public MyScheduleResponseDto createSchedule(@Valid @RequestBody MyScheduleRequestDto myScheduleRequestDto) {
MyScheduleService myScheduleService = new MyScheduleService(jdbcTemplate);
return myScheduleService.createSchedule(myScheduleRequestDto);
}
import com.sparta.myscheduleserver.dto.ManagerRequestDto;
import com.sparta.myscheduleserver.entity.Manager;
import com.sparta.myscheduleserver.service.ManagerService;
import jakarta.validation.Valid;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/managers")
@Validated
public class ManagerController {
private final ManagerService managerService;
public ManagerController(ManagerService managerService) {
this.managerService = managerService;
}
// 담당자 생성
@PostMapping
public void createManager(@Valid @RequestBody ManagerRequestDto managerRequestDto) {
managerService.saveManager(managerRequestDto);
}
이러면 필수값을 지정하고, 글자 크기를 제한할 수 있었다.