Spring IP地址验证

mbs*_*mbs 5 java ip validation spring spring-roo

我正在寻找在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;
}
Run Code Online (Sandbox Code Playgroud)

使用此设置,仅当字符串包含7到15个字符时才会进行验证,但如果它是IP地址则不会验证.

就像是

@validIpAddress
private String ip;
Run Code Online (Sandbox Code Playgroud)

会好的.

知道这是否可能?

Dav*_*itz 10

您可以使用带有IP地址正则表达式的JSR 303 Pattern验证器:

@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;
Run Code Online (Sandbox Code Playgroud)

编辑:转义反斜杠

  • 但是如果创建一个额外的注释我可以多次使用它,我只能在一个地方扩展它.感谢正则表达式我无论如何都需要它进行验证. (2认同)

sbk*_*sbk 7

绝对有可能.您将需要编写自定义注释和实现类的代码.没太多的努力.请看这里的背景: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 {};
}
Run Code Online (Sandbox Code Playgroud)

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

  @Override
  public boolean isValid(Object value, ConstraintValidatorContext cvContext)
  {
    // logic here
  }
}
Run Code Online (Sandbox Code Playgroud)