问题标签 [spring-validator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5128 浏览

java - Spring Validator 接口的 supports() 方法究竟是如何工作的?

我是 Spring MVC 的新手,我对这个验证器示例的工作方式有以下疑问:

所以我有这个search.jsp页面,用户可以在其中通过 2 个字段条件(产品名称和产品所属的类别)搜索产品:

因此,在教程中介绍了对实现自定义验证器的前一个视图的 2 个字段的输入的一些限制。具体而言,用户必须:

1)用户必须插入产品名称或类别

2) 名称长度必须至少由 3 个字符组成。

3) 用户只能按名称或类别进行选择,但不能在Product模型对象的某些其他字段上进行选择

为了实现这个自定义验证器,它创建了这个实现 Spring Validator接口的ProductSearchValidator类:

据我了解,supports()方法表示是否可以从此验证器验证类的特定实例,并且validate()方法实现特定的验证逻辑。

好的,validate()方法对我来说很清楚(它实现了前面 3 个指定的限制)。

我无法理解的是supports()方法到底是怎么做的

具体是如何工作的?什么代表它的输入参数(Class clazz)?什么代表返回的布尔值?( Product.class.isAssignableFrom(clazz)评估的含义是什么?)

肿瘤坏死因子

0 投票
1 回答
2737 浏览

java - check if two password entries are identical in spring mvc registration form?

I am getting the following error message when I try to submit a registration form to check for matching password entries in a Spring MVC app using jsp:

The registration form has a password field and a passwordtest field to make sure that the user did not make a typo. In other words, the user is asked to enter their requested new password twice so that the server can confirm that both attempts match before the new user's password is saved in the database.

How can I change the code below so that Spring performs server side validation to confirm that the user's two password attempts are identical, and to send a useful alert message to the view if they are not identical?

The jsp code for the two fields is:

The problem seems to be in the newUserFormValidator.java class, which has the following code:

The line of code in the jsp that the stack trace points to is:

However, please note that this line of code does successfully print an error when the user leaves the password field empty. So I think the problem is that something else needs to be added.

0 投票
1 回答
115 浏览

spring-mvc - 如何确保根据新 TLD 验证电子邮件

我正在使用弹簧验证:

但我想确保新 TLD 得到尊重。Spring 是否甚至会查看电子邮件域 TLD 并确保它们得到遵守?

举个例子:我想验证以下内容:joe@emperor.clothing

0 投票
3 回答
2244 浏览

java - Spring MVC 如何解析和验证处理程序方法参数?

我是 Spring MVC 的新手,我已经导入了一个与服务器端验证相关的教程项目,我对它的工作原理有些怀疑。

所以我有这个名为login.jsp的登录页面,其中包含这个登录表单:

我认为使用从模型中检索到的commandName="user"属性指定的对象(如果我做错了断言,请纠正我)来存储用户插入的用户名和密码。

这个commandName="user"是这个User类的一个实例:

如您所见,在用户名密码字段上声明了@NotBlank@Size验证注释。

这里是第一个疑问:与 2 used library javax.validationorg.hibernate.validator到底有什么区别?

为什么在教程中同时使用两者?我可以只使用休眠验证器库来做同样的事情吗?(我认为我可以使用 Hibernate 验证器指定字符串的有效长度,或者不)?

因此,当登录表单被提交时,它会生成并向/login资源发出 HttpRequest,该资源由该方法处理并声明为控制器类:

好的,现在我对这种方法有以下疑问:

1) 将此对象作为输入参数:@Valid User user。谁传给它?我认为这可能取决于我在表单中指定commandName="user"的事实,因此 Spring 会自动执行此操作。这是对的吗?

2)据我所知,@Valid注释会自动调用验证过程。它是怎么发生的?与Spring提供的AOP功能有关吗?或者是什么?为什么这个@Valid注释只与javax.validation库有关,而不与 Hibernate 验证器相关(所以这个@Valid注释也验证用 Hibernate 验证器注释注释的字段?为什么?)

3)据我所知,如果用户在登录表单中插入错误的值,我可以通过BindingResult br输入参数获取此错误。使用调试器,我可以看到该对象包含由定义到User模型对象中的注释定义的错误消息。具体是如何工作的?

肿瘤坏死因子

0 投票
1 回答
436 浏览

spring - @PreAuthorize 控制器使@InitBinder 中的@Inject 无效

在一个简单的控制器中:

我注意到注入的验证器在方法中始终为空initBinder,记录器甚至为空(并抛出 NPE),这很奇怪。

如果我完全删除该 @InitBinder initBinder()方法,myValidator则每个方法中都可以使用(不为空)。

排除了很多因素后,我发现罪魁祸首就是@PreAuthorize("hasAuthority('USER')")。删除后@PreAuthorize,一切正常。

这是一个错误吗?与 SpringSecurity 和 SpringValidation 和 SpringMVC 有冲突吗?

如何解决?

环境:

先谢谢了。

0 投票
2 回答
44 浏览

java - Java Spring 4验证失败,而不是呈现表单,它只是打印视图名称

我来自 PHP 世界,并试图在业余时间学习 Java Spring 框架。在我决定向表单添加验证之前,我做得很好。下面是我的代码。

在验证失败而不是呈现“addUser”视图时,它只是在屏幕上打印“addUser”。我究竟做错了什么?完整的源代码可以在这里看到。

编辑

如果我按照以下几个答案的建议@ResponseBodyaddUser方法中删除,我会得到

HTTP 状态 500 - java.lang.IllegalStateException:Bean 名称“命令”的 BindingResult 和普通目标对象都不能用作请求属性

0 投票
0 回答
108 浏览

spring - getDeclaredField 和注释

我正在使用 springframework 验证器来验证我的应用程序。目前我将我的字段名作为硬编码字符串传递给验证器。这引起了很多问题,如果模型中的字段名发生更改,验证将失败。

我已经研究了反射以使用 getDeclaredField 从模型中获取文件名。但是,此方法返回该类的文件列表,如果我需要获取特定字段,则必须传递正确的索引。例如。fields[8].getName(). 因此,如果字段的位置发生变化,我会遇到问题。

我想知道是否有任何其他更简单的方法可以将特定字段名传递给 rejectValue ?自定义注释会起作用吗?喜欢

@firstName private String firstName;

然后使用 getDeclaredAnnotations 来获取我的字段名?

这就是我现在的做法。

如果我使用反射

0 投票
1 回答
284 浏览

java - 如何在 Spring MVC 中检索 ErrorField 的错误消息

我正在构建一个自定义验证器,它依赖@Annotations于我的模型/POJO(我不能使用@Valid或扩展Validator)。

我正确地创建并填写了一个FieldError. 现在,我的问题是:如何获取必须在屏幕上显示的错误消息(来自文件属性)。我需要在课堂上操作该消息,所以我必须在它显示在屏幕上之前到达它

例如,我知道我的 FieldError 的代码之一是Size.objectName.fieldName. 我需要从文件属性中获取相关消息。

如果我将我的添加FieldErrorBindingResultBindingResult请完成所有工作并将“Size.objectName.fieldName”转为“大小应在 3 到 10 之间”。我怎么能自己做呢?

谢谢

0 投票
2 回答
7708 浏览

java - Spring REST - 验证原始 GET 请求参数

有没有办法使用注释验证原始(int、String 等)GET 参数?

如您所见,我放了一堆注释来验证 someInt 是一个 10 位的正整数,但它仍然接受各种整数。

0 投票
1 回答
602 浏览

spring - 如何让 Spring Boot 在创建所有其他 bean 之前创建一个 bean 验证器

我正在尝试将一个添加LocalValidatorFactoryBean到现有的 Spring Boot Web 应用程序中。

无论我尝试过什么(稍后列出),它只会在大多数其他 bean 之后创建验证器(通过日志记录和断点验证),因此它们永远不会得到验证。

切线地,我在类路径上有hibernate-validator,并试图在我的@Component属性上使用javax.validation.constraints。

应用程序类有@Configuration,@EnableAutoConfiguration@ComponentScan({"my.package.**"}).

  • 使用 bean 添加 application.xml<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
  • 将上述 bean 添加到 validator.xml 并添加@ImportResource("validator.xml")
  • @Bean向Application 类添加一个新的。public Validator validator() { return new LocalValidatorFactoryBean(); }
  • 添加@Order(Ordered.HIGHEST_PRECEDENCE)到上面@Bean
  • BeanValidator @Component添加到扫描的包中。
  • 并添加@Order到它。

在所有情况下,只有在 FilterRegistrationBean 完成记录其业务后才加载验证器,但我要验证的 bean 已经创建并用于设置数据连接和安全性等。

自从我使用 Spring 以来已经有几年了,但是在 application.xml 中定义所有内容时我不记得这些问题。这只是 spring-boot 不支持的东西,我应该回到传统的 Spring 应用程序配置吗?

我怎样才能让它验证我所有的豆子?