9

Spring roo プロジェクトで IP アドレスを検証する可能性を探しています。

私のエンティティは次のようになります

package com.ip.test.domain;

import javax.persistence.ManyToOne;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.jpa.activerecord.RooJpaActiveRecord;
import org.springframework.roo.addon.tostring.RooToString;

@RooJavaBean
@RooToString
@RooJpaActiveRecord
public class IP {

@NotNull
@Size(min = 7, max = 15)
private String ip;

@ManyToOne
private Hoster Hoster;
}

この設定では、文字列に 7 ~ 15 文字が含まれている場合にのみ検証されますが、実際には IP アドレスである場合は検証されません。

何かのようなもの

@validIpAddress
private String ip;

いいだろう。

それが可能かどうか、何か考えはありますか?

4

3 に答える 3

15

JSR 303 パターンバリデーターを使用して、IP アドレスの正規表現を使用できます。

@NotNull
@Pattern(regexp = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$")
private String ip;

編集:バックスラッシュをエスケープ

于 2013-02-14T14:41:43.097 に答える
8

間違いなく可能です。カスタム アノテーションと実装クラスをコーディングする必要があります。あまり努力しないでください。背景については、http: //docs.jboss.org/hibernate/validator/5.0/reference/en-US/html_single/#validator-customconstraintsを参照してください。

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
@Documented
@Constraint(validatedBy = IpAddressValidator.class)
public @interface IpAddress
{
  String message() default "{ipAddress.invalid}";
  Class<?>[] groups() default {};
  Class<? extends Payload>[] payload() default {};
}

public class IpAddressValidator implements ConstraintValidator<IpAddress, Object>
{
  @Override
  public void initialize(IpAddress constraintAnnotation)
  {
  }

  @Override
  public boolean isValid(Object value, ConstraintValidatorContext cvContext)
  {
    // logic here
  }
}
于 2013-02-14T14:36:05.300 に答える
0

基本的に、カスタム バリデータで JSR-303 アノテーションを使用する必要があります。ここで完全な作業例を参照してください。

于 2013-02-14T14:36:32.813 に答える