Spring Rest Web服务输入验证

时间:2015-05-13 01:58:54

标签: java spring rest spring-mvc restful-url

我有一个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将抛出无效的请求异常。

1 个答案:

答案 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

中详细了解相关信息