velog에서 이전한 글 입니다.
DTO/LomBoK
@Getter
public class UserSignUpDto {
...
private boolean admin = false;
...
}
boolean @getter 는 isAdmin() 으로 작성된다.
boolean값은 is로 시작하는게 보통이다. ex) OptionalType.isEmpty()/isPresent()
@Getter
@Setter
@ToString(callSuper = true)
public class PostUpdateDto extends PostUserDto {
private Optional<String> title;
private Optional<String> contents;
public PostUpdateDto(String username, String password) {
super(username, password);
}
}
@AllArgsConstructor
@Getter
@Setter
@ToString
public class PostUserDto {
@NotBlank
private String username;
@NotBlank
private String password;
}
상속받았을 때 @ToString(callSuper = true)을 적용하면 부모까지 출력된다.
ex) PostUpdateDto(super=PostUserDto(username=choi0, password=abcd), title=Optional[hi2], contents=null)
@Getter/Setter는 부모 class와 무관하다. 생성자를 따로 작성해줘야 한다.
위와 같이 부모에 validate가 있어도 validate 잘 동작한다.
validation
implementation 'org.springframework.boot:spring-boot-starter-validation'
을 gradle에 추가한다.
(controller)
@PatchMapping("/{postId}")
public PostResponseDto patchPost(@PathVariable Long postId, @Valid PostUpdateDto requestDto, BindingResult bindResult) {
List<FieldError> fieldErrors = bindResult.getFieldErrors();
if(fieldErrors.size() > 0) throw new IllegalArgumentException("Dto fail");
...
}
기본 DTO는 null값이 할당될 수 있었다. validate를 DTO에 적용하고 Controller에 명시하면 검증을 거치고 BindingResult를 통해 결과를 반환한다.
결과에서 Error가 있다면 던지고 @ExceptionHandler(Error.class)
에서 처리하는 등의 방법이 있다.
'Spring' 카테고리의 다른 글
Spring boot DI 주입 방식 (필드/수정자/생성자) (0) | 2023.07.22 |
---|---|
스프링) Spring jpa 순환참조 (23-07-07) (0) | 2023.07.13 |
스프링) Spring boot ExceptionHandler/ Optional (23-06-28) (0) | 2023.07.13 |
스프링) Spring boot Request data (23-06-26) (0) | 2023.07.13 |
스프링) Spring boot 컨셉/ 자바17 (23-05-31) (0) | 2023.07.13 |