我正在使用 Bean 验证 (JSR-303) 开发 Spring Web 应用程序 (Spring MVC 4)。但有时我需要在前端(thymeleaf)上进行不同的验证,例如我需要构建一个注册表单来保存用户信息,为此,需要“emailConfirmation”、“passwordConfirmation”等字段。这种字段我不需要保存在我的数据库中,所以它们是@Transient,但也有@NotNull,因为我需要验证表单。
当我需要对此域执行其他操作并保存它时,Bean 验证会阻止我,因为它们是 @NotNull 或 @NotEmpty 字段。
我的问题是,在这种情况下我该怎么办?
我已经想到的:
- 为此域进行自定义验证,并删除@NotNull, 这些字段的 @NotEmpty 注释。
- 创建不同的域 只是为了在我的前端使用它,验证它后,将其复制到 实体域。
谢谢, 亚历山大。
最佳答案
第二个选项 - 创建一个不同的域只是为了在我的前端中使用它,验证它后,将其复制到实体域对我来说有好处。
最好将DTO(数据传输对象)和实体分开。在DTO中添加验证,检查发送的数据是否正确。永远不要相信客户端验证。这可能是黑客或客户端上的错误脚本或任何其他原因,您需要确保尝试在服务器上处理的数据是正确的。
关于java - 良好实践 - Spring 验证 - 前端与后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29167506/