Java Spring IP地址验证

Java Spring IP地址验证,java,spring,validation,ip,spring-roo,Java,Spring,Validation,Ip,Spring Roo,我正在寻找在我的SpringRoo项目中验证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.RooJavaBea

我正在寻找在我的SpringRoo项目中验证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;
那太好了


有没有可能的想法?

肯定有可能。您需要编写一个自定义注释和实现类。没有太多的努力。请参见此处了解背景:

@Retention(RetentionPolicy.RUNTIME)
@目标({ElementType.METHOD,ElementType.FIELD,ElementType.ANNOTATION_TYPE})
@记录
@约束(validatedBy=IpAddressValidator.class)
公共@接口IP地址
{
字符串消息()默认值“{ipAddress.invalid}”;
类[]组()默认值{};

类本质上,您希望将JSR-303注释与自定义验证器一起使用。请参阅完整的工作示例。

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

@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;

编辑:转义反斜杠

您需要构建自己的验证程序。请查看验证ISBN号的示例。该模式可以轻松扩展…关键是,当您可以使用常规表达式时,您不需要编写额外的批注和验证程序,但如果您创建了额外的批注,我可以多次使用它,而且我必须这样做只在一个地方扩展它。感谢regex,我无论如何都需要它来进行验证。regexp字符串文本需要转义。请解释为什么initialize方法为空?您需要该方法来满足ConstraintValidator接口的约定,但如果您不需要实际初始化任何内容,则可以将其保留为空。
public class IpAddressValidator implements ConstraintValidator<IpAddress, Object>
{
  @Override
  public void initialize(IpAddress constraintAnnotation)
  {
  }

  @Override
  public boolean isValid(Object value, ConstraintValidatorContext cvContext)
  {
    // logic here
  }
}
@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;