【问题标题】:Spring MVC: Where to place validation and how to validation entity referencesSpring MVC:在哪里放置验证以及如何验证实体引用
【发布时间】:2011-02-07 02:48:04
【问题描述】:

假设我有以下用于创建用户的命令 bean:

public class CreateUserCommand {

   private String userName;
   private String email;

   private Integer occupationId;
   pirvate Integer countryId;

}

occupationId 和 countryId 是表单上的下拉选定值。它们映射到数据库中的实体(职业、国家/地区)。

这个命令对象将被提供给一个服务外观,如下所示:

userServiceFacade.createUser(CreateUserCommand 命令);

这个门面将构造一个用户实体来发送给实际的服务。所以我想在外观层我将不得不进行几次 dao 调用来映射 User 实体的所有查找属性。

基于此,验证职业标识和国家标识映射到真实实体的最佳策略是什么?执行此验证的最佳位置在哪里?有 spring 验证器,但我不确定这是最好的地方,因为我对这种方法持谨慎态度,因为验证与 web 层相关,但这也意味着我需要在验证器中进行 dao 调用进行验证,但是当命令-> 实体转换发生时,我需要再次调用外观层中的 dao。

有什么我可以做得更好的吗?

谢谢。

【问题讨论】:

    标签: java spring spring-mvc validation


    【解决方案1】:

    您确定需要 DTO 来检索实体吗?

    我想你的用户如下

    public class User implements Serializable {
    
        private String userName;
        private String email;
    
        private Occupation occupation;
        private Country country;
    
    }
    

    通常,在显示表单时引用另一个实体是通过使用一些

    【讨论】:

    • 感谢您的回复。 DTO 的原因是域(休眠)对象非常复杂,有很多关系、方法等。这里的用户示例仅用于说明。这就是为什么我想从域中屏蔽表示层。在这种情况下,我需要执行上述验证,因为我不想公开实体。我曾计划使用 Validator,尽管这会将验证逻辑放在 Web 层上,这对我来说似乎很可疑。除非验证器不应该只做简单的字段检查?
    • @arrages 验证器旨在执行简单的验证。像 isInteger、isNotBlank、isNotNull 之类的东西,仅此而已。当使用复杂的验证时,你最好把它放在你的业务逻辑中。请注意,正如您自己所说,我也使用非常复杂的关系,方法,没有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    相关资源
    最近更新 更多