使用Java对数据执行服务器端验证的最佳方法

时间:2011-03-25 09:18:08

标签: java validation server-side

有人可以指导我这个基本问题:使用Java对数据执行服务器端验证的最佳方法是什么?

我想知道是否有可用的开源库来执行服务器端验证。

感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

这取决于您使用的是哪个Web开发框架。


原始JSP Servlet

如果您使用的是简单的jsp servlet,那么我建议为每个表单/ jsp屏幕添加一个验证程序包/ jar。并在传递给服务之前从控制器验证它。


<强> JSF

如果您正在使用JSF,那么提供了非常精心设计的验证阶段,您可以使用现成的验证器(您只需在表单字段中添加注释及其完成),或者您也可以创建自己的验证器。


Spring MVC

如果您使用的是Spring MVC,它还有一个saperate layer for validation


<强> Struts的

Struts也有saperate layer for validation

答案 1 :(得分:3)

如果您希望验证POJO,可以查看Oval框架http://oval.sourceforge.net/

如果您的应用程序是基于pojos或bean设计的,那么JSR-303(及其实现)也可以提供帮助

以下是OVal中的自定义验证示例: 假设你必须在SomeValueClass中验证变量map,并确保键'greeting'的值始终存在。

public class SomeValueClass {

@FormCollection
Map variables;


public static void main(String[] args) {
    SomeValueClass svc1 = new SomeValueClass();
    svc1.variables = new HashMap();
    svc1.variables.put("greeting", "");

    Validator validator = new Validator();
    List<ConstraintViolation> violations = validator.validate(svc1);
    System.out.println("svc1 violations.size() = " + violations.size());
}

“Map variables;”上的@FormCollection注释是一个自定义验证器,如下所示:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})
@net.sf.oval.configuration.annotation.Constraint(checkWith = FormCollectionCheck.class)
public @interface FormCollection {
  String message() default "Some errors in the form";
}

约束检查类将如下所示:

public class FormCollectionCheck extends AbstractAnnotationCheck<FormCollection> {
  public boolean isSatisfied(Object validatedObject, Object valueToValidate, OValContext context, Validator validator) {
    Map vars = (Map) valueToValidate;
    return !(vars.get("greeting")==null || ((String)vars.get("greeting")).length()<=0);
  }
}

希望有所帮助, 干杯

答案 2 :(得分:1)

然后你去提供像struts等提供内置验证的框架。这些将为你提供验证组件。它也是一个开源。