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

使用Java对数据执行服务器端验证的最佳方法,java,validation,server-side,Java,Validation,Server Side,有人能告诉我这个基本问题吗:使用Java对数据执行服务器端验证的最佳方法是什么 我想知道是否有开源库也可用于执行服务器端验证 非常感谢您的帮助。这取决于您使用的web开发框架 原始JSP Servlet 如果您使用的是简单的JSPServlet,那么我建议为每个表单/jsp屏幕添加一个验证器包/jar。并在传递到服务之前从控制器对其进行验证 JSF 如果您使用的是JSF,那么提供了设计良好的验证阶段,您可以使用现成的验证器(您只需在表单字段及其完成部分添加注释),或者您也可以创建自己的验证器

有人能告诉我这个基本问题吗:使用Java对数据执行服务器端验证的最佳方法是什么

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


非常感谢您的帮助。

这取决于您使用的web开发框架


原始JSP Servlet

如果您使用的是简单的JSPServlet,那么我建议为每个表单/jsp屏幕添加一个验证器包/jar。并在传递到服务之前从控制器对其进行验证


JSF

如果您使用的是JSF,那么提供了设计良好的验证阶段,您可以使用现成的验证器(您只需在表单字段及其完成部分添加注释),或者您也可以创建自己的验证器


春季MVC

如果您使用的是SpringMVC,那么它也有一个


Struts


Struts也得到了

,然后你选择了框架,它提供了内置的验证,比如Struts等。这些将为你提供验证组件。它也是一个开源软件。

如果你想验证POJO,你可以看看椭圆形框架

如果我们的应用程序是基于POJO或bean设计的,那么JSR-303(及其实现)也可能会有所帮助

以下是椭圆形中的自定义验证示例: 假设您必须验证SomeValueClass中的变量映射,并确保键“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());
}
约束检查类将如下所示:

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);
  }
}
公共类FormCollectionCheck扩展了AbstractAnnotationCheck{
公共布尔值已满足(对象validatedObject、对象valueToValidate、OValContext上下文、验证器验证器){
Map vars=(Map)valueToValidate;

return!(vars.get(“问候”)==null | |((字符串)vars.get(“问候”)).length()这取决于要验证的内容。如果数据格式正确,发送方有效,您要验证什么?对于任何框架,最好使用DWR进行任何服务器端验证。编写一次重用任何可以使用DWR在验证中实现的概念。我使用的是原始JSP。我想我将使用第一个记录修补。谢谢你的帮助reply@Jigar:除了一个验证器还有其他选择吗?我存储了我所有的(调查)集合对象中的表单属性,如问题1、问题2等。我也使用同一个集合对象生成XML。因此,如果我可以使用接受集合对象而不是bean的东西,那就太好了。@aldrin:这是否意味着我可以验证集合对象?为了说明,我存储了web的属性集合对象中的表单。关键是询问的问题,值是用户的响应。我使用此集合对象是为了生成XML。如果此框架能够验证集合对象中的值,那就太好了。我确实查看了您的链接,但没有被说服。您能给我展示一些示例吗?@Khushroo您需要使用自定义验证器。我已经用一个可能对您有帮助的示例更新了我的答案。@aldrin:感谢您的及时帮助。我非常感谢。不幸的是,我不是会员,所以无法增加计数器。再次感谢。@aldrin:快速问题aldrin:在Issatified()中,目前您只检查地图中的一个值,因此此方法看起来非常简洁。但是,如果您有大约10个值要检查,则需要广泛使用if…else条件,我不太喜欢。有什么解决方法吗?再次感谢。@Khushroo如果您必须检查地图中的所有值,那么您可以我需要对它进行迭代。没有太多选择。如果对所有项目都进行相同的检查,那么可以使用循环。
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);
  }
}