[英]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.