Tuesday, January 15, 2013

jax-rs(jersey)覚書 #3 bean validation


これはjax-rsというわけではないが、セットで使うことが多いと思う。

JSR303 bean validationで、文字列の長さ、数値の大きさ、日付、nullなどの値チェックはほとんど可能。
使い方は非常に簡単で、validationしたいクラスのフィールドにアノテーションを設定すればよい。
javax.validation.constraintsには以下のアノテーションが定義されている。

  • @AssertFalse,@AssertTrue
  • @DecimalMax,@DecimalMin
  • @Max,@Min
  • @Digits
  • @Future,@Past
  • @Null,@NotNull
  • @Pattern
  • @Size

文字列の長さをチェックするには以下のようにする。
public class Employee {
    @Size(max=3, message="3桁までですよ!")
    private String empId;
    private String firstName;
    private String LastName;
    private String gender;

validationは、インターフェース javax.validation.Validator を使う。
SpringにDIさせるにはbean定義ファイルに以下の設定を行う。

;

実際にvalidationする例は以下の通り

@Service
public class EmployeeService {
    @Autowired
    private Validator validator;
    
    private void validateEmployee(Employee emp) {
        Set<Constraintviolation<Employee>> violations = validator.validate(emp);
    
        for (ConstraintViolation<employee> violation : violations) {
             System.out.print(violation.getPropertyPath().toString());
             System.out.print(" : ");
             System.out.println(violation.getMessage());
        }
    }

javax.validation.Validator.validate()で、javax.validation.ConstraintViolationのSetが得られる。
ConstraintViolation.getPropertyPath().toString()で、フィールド名が得られる。
ConstraintViolation.getMessage()で、アノテーションで設定したメッセージが得られる。

メッセージをプロパティファイルから得ることもできる(そうすべき)。
デフォルトのプロパティファイル名はValidationMessages.properties 。
public class Employee {
    @Size(max=3, message="{emp.id.size}")
    private String empId;

No comments:

Post a Comment