繁体   English   中英

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

[英]How to validate annotated with Spring @Value field using custom annotation?

如何检查“ $ {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 {...}

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

在这里找到一个例子

控制者

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 如果您仍然有问题,请随时在这里询问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM