<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());
});
}
}
잘못된 값을 넣어주고 검사를 진행한 코드이다.