Java Spring Boot 005-4 | Validation

Yunny.Log ·2022년 3월 3일
0

Spring Boot

목록 보기
26/80
post-thumbnail

Validation

public class PostDto {
    private int id;
    private String title;
    private String content;
    private String writer;
    private int boardId;
  • 제한사항 둘 수 있음 (글자수 등)
  • but 사용자 입력 예측은 어려워

사용자 입력 검증

  • 자카르타 Bean Validation 사용
    => 객체 상의 제약사항의 명세를 제공하기 위한 프로젝트

Validation Annotation 활용하기

설명 출처 : 블로그


@NotBlank
주석이 달린 요소는 null이 아니어야 하며, 하나 이상의 공백이 아닌 문자를 포함해야 합니다.
CharSequence 타입을 허용합니다.


@NotEmpty
주석이 달린 요소는 null이거나 비어있으면 안됩니다.
지원되는 타입은 CharSequence, Collection, Map, 배열입니다.
각각의 길이나 크기가 평가됩니다.


@NotNull
주석이 달린 요소는 null이 아니어야 합니다.
모든 타입을 허용합니다.


@Null
주석이 달린 요소는 null 이어야 합니다.
모든 타입을 허용합니다.


@Size(min=, max=)
주석이 달린 요소의 크기는 지정된 경계를 포함한 사이에 있어야 합니다.
지원되는 타입은 CharSequence, Collection, Map, 배열입니다.
null 요소는 유효한 것으로 간주됩니다.
요소의 크기는 min보다 크거나 같아야 하고, max보다 작거나 같아야 합니다.
min의 default 값은 0, max의 default 값은 2147483647 입니다.


1) dependencies 추가

	implementation 'org.springframework.boot:spring-boot-starter-validation'

2) PostDTO

public class PostDto {
    private int id;
    @NotNull
    private String title;
    @Size(max=400)
    private String content;
    @Size(min=3, max=10)
    private String writer;

3) PostController

  • 위에 dto에서 주석 넣는다고 바로 되는게 아니라 쟤네를 사용하는 데 앞에 가서
    @Valid 붙여줘야 함
    @LogArguments
    @PostMapping()
    @ResponseStatus(HttpStatus.CREATED)
    public void createPost(
            @Valid
            @RequestBody PostDto postdto
    ){
        this.postservice.createPost(postdto);
    }

4) postman 테스트

{
    "content":"test posting",
    "writer":"shucream"
}

위와 같이 title 이 null인 채로 보내면

위와 같은 not null 에러가 아주 기특하게 뜨게 된다

오류 사항 검증

1) ValidTestDto 만들기

public class ValidTestDto {
    @NotNull //변수가 null 여부
    private String notNullString;
    @NotEmpty //"" => 이건 null은 아닌데 empty인 경우
    //null이 아니면서 Object.size>0인지
    private String notEmptyString;
    @NotBlank //공백이 아닌 문자열
    private String notBlankString;
    @NotEmpty
    private List<String> notEmptyStringList;

2) 테스트를 위해 controller 코드 추가

    @PostMapping("test-valid")
    public void testValid(@Valid @RequestBody ValidTestDto dto){
        logger.info(dto.toString());
    }

3) 테스트
postdto

"title":"  ", 이렇게 보내면 에러 
.DefaultMessageSourceResolvable: codes [postDto.title,title]; arguments []; default message [title]]; default message [공백일 수 없습니다]] ]

testvaliddto

 {

    "notNullString":"  ",
    "notEmptyString":"test posting",
    "notBlankString":"shucream",
    "notEmptyStringList":[]
}

0개의 댓글