본문 바로가기

카테고리 없음

스프링 프레임워크 핵심기술 : 섹션 2. Resource/Validation

<Resource 추상화>

기본 스프링부트 내장 톰캣은 context path가 지정되어 있지 않다.

그래서 접두어를 넣지 않으면 ServletContextResource로 받게 되고 context path가 지정되어 있지 않기때문에 에러를 발생하게 된다.

그래서 접두어를 사용하여 명시적으로 표현하는 것이 좋다.(ex: file, classpath:)

 

14. Validation 추상화

예전에는 아래와 같이 validation 을 하려면 supports함수와 validation 함수를 구현해줘야했다.

package com.yoonbum.application.demo;

import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

public class EventValidator implements Validator {
    @Override
    public boolean supports(Class<?> aClass) {
        return Event.class.equals(aClass);
    }

    @Override
    public void validate(Object o, Errors errors) {
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "title", "customErrorCode : notEmpty", "Empty title is now allowed.");
    }
}

  하지만 이제는 간단한 어노테이션만으로도 검사가 가능하다.

@notEmpty @Email등으로 검사가 가능하다.

package com.yoonbum.application.demo;

import javax.validation.constraints.Email;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotEmpty;

public class Event {

    Integer id;

    @NotEmpty
    String title;

    @Email
    String Email;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getEmail() {
        return Email;
    }

    public void setEmail(String email) {
        Email = email;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

Event.java

package com.yoonbum.application.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import org.springframework.validation.BeanPropertyBindingResult;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import java.util.Arrays;

@Component
public class AppRunner implements ApplicationRunner {


    @Qualifier("defaultValidator")
    @Autowired
    Validator validator;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println(validator.getClass());
        Event event = new Event();
        event.setTitle("");
        event.setEmail("dd");
        //EventValidator eventValidator = new EventValidator();
        Errors errors = new BeanPropertyBindingResult(event, "event");

        validator.validate(event, errors);

        System.out.println(errors.hasErrors());

        errors.getAllErrors().forEach(e -> {
            Arrays.stream(e.getCodes()).forEach(System.out::println);
            System.out.println(e.getDefaultMessage());
        });

    }
}

 

잘못된 값을 넣어주고 검사를 진행한 코드이다.