- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试了解 Spring 中验证的工作原理。到目前为止,我了解到有两种方法可以执行用户输入数据的验证:
javax.validation.constraints
注释的 JSR-303 验证。此验证最适合简单的对象字段验证。但您也可以实现自定义类型级别注释,以根据检查多个字段的值执行更复杂的验证。org.springframework.validation.Validator
接口(interface)。似乎更适合更复杂的验证。如果我想同时使用这两种方法,在 Controller 中注册我的自定义 validator 的正确方法是什么?
这就是我想要做的。
我的自定义 validator 。
public class PasswordPairValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return PasswordPair.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
PasswordPair password = (PasswordPair) target;
if (!password.getPassword().equals(password.getRepeatPassword())) {
errors.reject("passwordField", "passwords don't match");
}
}
}
我的 Controller 。
@RestController
@RequestMapping("/api/v1/users")
public class UserController {
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.addValidators(new PasswordPairValidator());
}
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<UserInfo> createUser(
@RequestBody @Valid UserInfo userInfo) {
userInfo.setId(123);
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
.path("/{id}").buildAndExpand(userInfo.getId()).toUri();
return ResponseEntity.created(location).body(userInfo);
}
@RequestMapping(value = "/change_password", method = RequestMethod.POST)
public ResponseEntity<UserInfo> changePassword(
@RequestBody @Valid PasswordPair password) {
UserInfo user = new UserInfo("test@gmail.com", "testuser");
user.setId(123);
return ResponseEntity.ok().body(user);
}
}
当我调用 createUser
端点时,代码失败并出现以下错误:
ERROR c.e.testapp.controller.GlobalExceptionHandler - Internal Server Error
java.lang.IllegalStateException: Invalid target for Validator [com.example.testapp.validation.PasswordPairValidator@49acd001]: com.example.testapp.domain.UserInfo@cae4750
问题显然是 Spring 试图将 PasswordPairValidator
应用于 UserInfo
对象,这不是我的本意。为什么 Spring 不使用 validator 的 supports()
方法来检查哪些对象可以应用 validator ?
在另一个 stackoverflow 问题中,我发现我需要为 @InitBinder
注释指定值以使其工作,并且该值应该是“passwordPair”。但是这个值是什么,因为它不是类名(“PasswordPair”)或方法参数值(“password”)?
第二个问题是,如果我想添加多个 validator ,我是否需要定义多个 @InitBinder("value")
方法,还是有更简单的方法来实现?
最后一个问题,也许最好对所有内容都使用基于注释的验证,以验证单独的字段并使用 ConstraintValidator
实现类型级别的自定义注释以执行更复杂的验证?这些方法的优缺点有点令人困惑。
最佳答案
您必须为您的@InitBinder 注释提供一个参数。请引用这个question
上述问题也回答了您关于注册多个 validator 的其他问题。
关于java - Spring MVC : What's the right way to register custom Validator in REST controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49998093/
我第一次决定切换到 InnoDB 并尝试使用外键和其他 InnoDB 功能。 创建关系时,我应该只在一张表上声明它们吗?还是两个表? 例如,对于以下每种情况,您将在何处以及如何声明关系? 1 用户有很
老方法 当我以前在需要内容被搜索引擎索引的项目中异步加载页面时,我使用了一种非常简单的技术,那就是 Page $('#example').click(function(){
我目前正在为自己创建自己的自定义应用程序来编译 Java 文件。我的应用程序可以完美地编译 Java 文件,但现在我想开始为 Java 文件添加某种类型的测试(例如,我将一些变量传递给许多不同的文件
我需要建立从我的 iPhone 应用程序到客户服务器的 HTTPS 双向 SSL 连接。但是我没有看到任何安全的方式来将客户端证书传递给应用程序(这是一个电子银行应用程序,所以安全性确实是一个问题)。
我从事 Java 工作已经很长时间了,大约 6 个月前开始使用 Scala。我喜欢这门语言。我发现的一件事是,做事有多种方法。我不知道这是因为该语言的性质,还是因为它还很年轻并且在不断发展,习惯用法和
这是我所指的示例代码。 https://sites.google.com/site/ssljavaguide/example-code/2-way-ssl 我是否可以不设置与 keystore 相关的
我读过有关使用 MySQL AES_ENCRYPT/AES_DECRYPT(双向加密)不如使用 PHP - hash()(单向加密)安全的信息。 http://bytes.com/topic/php/
我正在进行一个路线选择项目,我需要使用道路类型和单向/双向交通信息填充道路网络。我想知道Tiger/Line道路数据集是否包含这样的数据。。我下载了加利福尼亚州的Tiger/Line道路数据集,但没有
我需要开发一个 iPad 应用程序,它应该管理两种方向模式(横向和纵向)。 根据 official Apple iOS documentation , 有 2 种方法可以继续。 -第一个包括在收到旋转
我正在训练一个 randomForest 模型,目的是保存它以进行预测(它将被下载并在外部上下文中使用)。我希望这个模型尽可能最小。 我读到有很多options和 packages减少模型的内存大小。
为什么将参数传递给匿名函数会影响结果?例如,下面的脚本将 a1 显示为 function(),将 a2 显示为数组。 var a1=(function(){return [1*2,2*2,3*2];}
我有一个 Python 列表: listx = [["a", 127, "Blue", 0], ["b", 127, "Red", 1], ["b", 127, "
在查看 Java 库时,特别是构造函数,我注意到字段通常会出于某种原因进行初始化和验证: public java.awt.Color(int r, int g, int b, int a) {
我想编写 Git 脚本。只创建一个 Unix 脚本是最好的方法吗? #!/bin/bashgit push origin master &&git checkout develop &&git mer
这个问题在这里已经有了答案: class or method alias in java (8 个回答) 去年关闭。 我有一个类的名称可能不必要地繁琐,其中包含许多我在其他地方使用的静态方法。 而不是
这个问题在这里已经有了答案: Best way to check function arguments? [closed] (14 个回答) Parameter validation, Best pr
在阅读我遇到的代码时,结构的以下定义和初始化: // header file struct foo{ char* name; int value; }; //Implementation file s
我正在使用多页表单方法在 Drupal 中开发一个自定义模块,并且我希望对步骤进行可视化。 步骤 1 > [_Step_2_] > 步骤 3 > 完成 商业规则: 他们总是能看到所有的步骤,以及他们现
Josh 的 answer 给我留下了深刻的印象关于客户端的“Angular 方式”和声明式风格。 但是你能帮我理解一下,怎么做吗: 我有一个单页应用程序,左侧是菜单栏,右侧是 div 容器。 当用户
Subversion 商店正在考虑改用 Mercurial,试图提前弄清楚开发人员的所有提示将是什么。这里有一个相当常见的用例,我不知道如何处理。 我正在研究一些较大的功能,我有一个重要的代码部分——
我是一名优秀的程序员,十分优秀!