【问题标题】:Validating integer in Spring MVC form以 Spring MVC 形式验证整数
【发布时间】:2014-08-04 02:13:35
【问题描述】:

这不是 Spring 的编程问题,而是请求建议。

我在 JSP 上有一个表单,要求用户输入他们的 ID 号。

页面上的表单调用控制器中的方法。从控制器调用验证器。

如果用户输入一个非数字值,我相信我可以使用以下方法进行检查:

typeMismatch.java.lang.Integer=您在需要数字的字段中输入了一个非数字值...

但我的问题与检查数据库中的用户 ID 有关,即如果 ID 不存在,则应拒绝输入。

那么,服务可以在验证器类中使用吗?对此有什么考虑吗?

【问题讨论】:

  • 用户授权码应该和数据验证码分开。
  • 通常情况下,我会同意。但这是一个演示应用程序,所以我很乐意稍微改变规则。

标签: java spring validation spring-mvc


【解决方案1】:

在演示应用程序中,您可以做看起来更简单的事情。但是你也问我有反对调用服务方法表单验证 bean 的注意事项。

恕我直言,主要问题是您将在服务层输入两次,一次用于验证,一次用于实际处理。这是通常管理交易的地方。因此,您最终可能会在同一个请求中打开 2 个不同的事务,而不仅仅是一个。如果您的应用程序或数据库可能负载过重,则应考虑这一点。

当然,如果您在整个请求过程中都有事务,例如 Open Session In View 模式,那么这不再是一个问题。

【讨论】:

  • 代码还没写,暂时不能说。但你给出了一些很好的建议。
【解决方案2】:

这取决于您是否将此验证规则视为业务逻辑的一部分。我可以看到以下选项:

  1. 验证规则被视为业务逻辑的一部分。如果用户 ID 已经存在,则在服务层抛出异常。通过这种方式,您将在一个事务中处理所有事情。
  2. 验证规则不被视为您的业务逻辑的一部分。在验证 bean 上使用服务方法。这将为您提供所有验证的通用位置。

【讨论】:

  • 这只是一个演示应用程序。与其说是验证输入,不如说是业务逻辑。但是测试用户存在的方法将是一个服务方法(它又会调用一个DAO方法)。我打算从处理输入的验证器中调用它。
猜你喜欢
  • 2011-12-21
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 2016-12-07
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多