Spring Validation
사전 지식
사용법
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.4.0.Final</version> </dependency>@Configuration public class AppConfig { @Bean public LocalValidatorFactoryBean validator() { return new LocalValidatorFactoryBean(); } }@Data public class Message { // 이 NotNull처럼 `javax.validation.Constraint` 어노테이션이 붙어있는 어노테이션들 // `javax.validation.constraints` 패키지를 보면 됨. @NotNull private String sender; private String message }@RestController @RequestMapping("/messages") public class MessageController { private final Validator validator; @Autowired public MessageController(Validator validator) { this.validator = validator; } @PostMapping public Map<String, Object> send(Message message) { // 만약에 위의 @Constraints에 위배되는 값이 있다면 이 Set에 들어가게 된다 Set<ConstraintViolation<Message>> violationSet = validator.validate(message); if (violationSet.isEmpty() == false) { // 만약에 Message.sender가 null이라면 이 Exception의 메세지는 // [class: Message, property: sender, message: may not be null] throw new IllegalArgumentException( violationSet.stream() .map(violation -> String.format("[class: %s, property: %s, message: %s]", violation.getRootBeanClass().getSimpleName(), violation.getPropertyPath().toString(), violation.getMessage())) .collect(Collectors.joining(", ")) ); } // 이하 생략 } }
Last updated