我有一个Spring rest webservice。控制器类将HTTP请求中的参数映射到custoom请求对象。我的Request对象如下所示:
public class DMSRequest_global {
protected String userName = "";
protected String includeInactiveUsers = "";
protected String documentType = ""; And the getter and setter of the fields above
}
Spring使用反射来设置从incomming请求到此对象的值。我的问题是我们是否可以使用注释或某些东西来验证上面示例中的documentType之类的字段,只接受列表中的值可接受的值,如{" .doc"," .txt"," .pdf"}。如果在请求中发送了一些其他值,则spring将抛出无效的请求异常。
答案 0 :(得分:1)
您可以编写自己的自定义验证程序。
@Target( { METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Contraint(validatedBy = DocumentTypeValidator.class)
@Documented
public @interface ValidDocumentType {
String message() default "{com.mycompany.constraints.invaliddocument}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String[] value();
}
这是一个自定义验证器。
public class DocumentTypeValidator implements ConstraintValidator<ValidDocumentType, String> {
private String[] extenstions;
public void initialize(ValidDocumentType constraintAnnotation) {
this.extenstions = constraintAnnotation.value();
}
public boolean isValid(String object, ConstraintValidatorContext constraintContext) {
if (object == null)
return true;
for(String ext:extenstions) {
if(object.toLowerCase().matches(ext.toLowerCase())) {
return true;
}
}
return false;
}
}
最后,您可以使用自定义注释来注释bean。
@ValidDocumentType({"*.doc", "*.txt","*.pdf"})
protected String documentType = "";
您可以在此post
中详细了解相关信息