如何使用自定义注释来验证带有Spring @Value字段的注释?

时间:2018-07-18 14:10:08

标签: java spring bean-validation spring-annotations

如何检查“ $ {path}”值是否为空或正确的路径,如果是,则抛出一些异常?我想在Bean创建期间实现它。 我发现所有用于多层的验证都是这样 使用@Valid批注的@Controller类中用于用户输入数据验证的应用程序。 但是我没用。

这是一个简单的Spring应用程序,可以读取application.properties并以某种方式对其进行处理。 这是我的代码:

@Component
public class ParseService {

@Value("${path}")
@PathValue
private String path;
}

@Documented
@Constraint(validatedBy = PathValidatorImpl.class)
@Retention(RUNTIME)
@Target({ElementType.FIELD})
public @interface PathValue {

  String message() default "Is empty or not valid path!"; 
}

public class PathValidatorImpl implements ConstraintValidator<PathValue, 
String> {

  @Override
  public void initialize(PathValue pathValue) {
  }

  @Override
  public boolean isValid(String path, ConstraintValidatorContext ctx) {
  if (path.isEmpty() || !(new File(path).exists())) {
     return false;
    } else
     return true;
    }
 }

我可以这样做,如果是,我在做什么错了?

我尝试过:

@Component
public class FileGuider {
public List<File> search(@Valid String path, String sourceFileExtension)
  throws IOException, NoFilesToParseException {...}

P.S。我在这个应用程序中使用Spring进行学习。

1 个答案:

答案 0 :(得分:0)

在这里找到一个例子

控制器

import javax.validation.Valid; //Import this Class for valid annotation
 @RequestMapping(value = CommonConstants.TOKEN_CREATION , method = RequestMethod.POST)
    public ResponseJson tokenCreation(@Valid @RequestBody LoginReq loginReq) {
        response.setResponse(authenticationService.authenticateUser(loginReq));
        return response;
    }

具有验证的下一个LoginReq请求类

import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
public class LoginReq {
    @NotEmpty 
    @Email(message ="{NotEmpty.user.email}")
    private String userEmail;
    @NotEmpty
    @Size(min=8, message="{NotEmpty.user.password}")
    private String userCredential;
    public String getUserEmail() {
        return userEmail;
    }
    public void setUserEmail(String userEmail) {
        this.userEmail = userEmail;
    }
    public String getUserCredential() {
        return userCredential;
    }
    public void setUserCredential(String userCredential) {
        this.userCredential = userCredential;
    }
}

有关更多信息,GitHubLink。如果您仍然有问题,请随时在这里询问。