Spring 3.1 自动装配在自定义约束验证器中不起作用

2023-11-26

我在自定义约束验证器内自动装配 bean 时遇到问题。约束验证器实例不是使用 Spring 的 LocalValidatorFactoryBean 给出的。 JSR-303 提供程序是 hibernate-validator 4.2.0.Final。

Spring配置摘录:

<!-- JSR 303 validation -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/> 

自定义约束验证器:

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

import org.springframework.beans.factory.annotation.Autowired;

import com.model.Subject;
import com.services.SomeTypeService;

public class ReadOnlyValidator implements ConstraintValidator<ReadOnly, String> {

@Autowired
private SomeTypeService someTypeService;

@Override
public void initialize(ReadOnly constraintAnnotation) { }

@Override
public boolean isValid(String type, ConstraintValidatorContext context) {
    try {
         if (null != type) {
                        return !someTypeService.isReadonly(type);
                     }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return false;
}
}

注解:

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

@Target( { METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER } )
@Retention(RUNTIME)
@Constraint(validatedBy = ReadOnlyValidator.class)
@Documented
public @interface ReadOnly {
String message() default "{constraints.subjecttype.readonly}";
public abstract Class<?>[] groups() default {};
public abstract Class<? extends Payload>[] payload() default {};
}

一些服务:

 @Validated
 public interface SomeService {
    ...
    public void updateType(@ReadOnly String type) throws SomeException;
    ...
 }

一些服务实现:

 @Service
 public class SomeServiceImpl implements SomeService {
  ...
    public void updateType(String type) throws SomeException {
     // do something
    }
  ...
 }

SomeTypeService 是另一个 @Service 注解的 bean,它不依赖于 SomeService ...

问题是我得到一个 NPE,因为自动装配不起作用;其他人正在管理自定义验证器实例,而不是 Spring ...

预先感谢您提供任何类型的建议。


发现问题了。 MethodValidationPostProcessor 和 mvc:annotation-driven 声明必须使用相同的“validator”bean 引用:

服务上下文.xml

<!-- JSR 303 validation -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor">
    <property name="validator" ref="validator"/>
</bean>
    ...

调度程序-servlet.xml

...
<mvc:annotation-driven validator="validator" />
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring 3.1 自动装配在自定义约束验证器中不起作用 的相关文章

随机推荐

  • 超媒体与 Servicestack 新 API 链接

    我正在评估如何向 DTO 响应添加超媒体链接 虽然没有标准 但将 List 添加到响应 DTO 似乎是建议的方法 您知道使用ServiceStack框架实现的示例或参考吗 添加列表对我来说没问题 但我的疑问是在哪里放置以下链接的逻辑 在服务
  • WPF:在 TreeViewItem 中正确存储对象

    为了将对象 例如 类的实例 存储在 TreeViewItem 中 我当前将该对象存储在TreeViewItem s Header然后覆盖ToString该类的方法 以便它显示正确的字符串标题 然后我在事件期间将对象投射回来 这是实现这种事情
  • Fortran 中何处放置“隐式无”

    我需要放implicit none在每个函数和子程序中 或者将其放在包含这些函数和子例程的模块的开头就足够了吗 或者将其放在使用这些模块的程序的开头就足够了吗 通过观察别人的工作代码 implicit none包含在所有这些地方 我不确定这
  • React Hooks 的 Keydown/up 事件无法正常工作

    我正在尝试为我正在开发的游戏创建基于箭头的键盘控件 当然 我想跟上 React 的最新动态 所以我想创建一个函数组件并使用钩子 我创建了一个JSFiddle对于我的越野车组件 它几乎按预期工作 除非我同时按下很多箭头键 然后好像有一些key
  • 在 tidyr/dplyr 中添加零计数行的正确习惯用法

    假设我有一些如下所示的计数数据 library tidyr library dplyr X raw lt data frame x as factor c A A A B B B y as factor c i ii ii i i i z
  • Java 和无符号值

    我正在解析 DatagramSocket 中的无符号位 我总共有 24 位 或 3 个字节 进来 它们是 1 个无符号 8 位整数 后跟一个 16 位有符号整数 但是java从来不会将除了有符号字节之外的任何东西存储到字节 字节数组中 当j
  • 无法刷新hangfire仪表板中的统计信息

    我的网站在同一台服务器上使用hangfire 运行 Hangfire 仪表板在本地运行良好 但是 当我访问http localhost hangfire recurring在服务器计算机上 它报告此错误 Unable to refresh
  • bash文本搜索:查找一个文件的内容是否存在于另一个文件中[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 假设我们有两个文件 a txt 和 b txt 每个文件都有多行文本 如何编写一个shell脚本来检查b txt中是否存在a txt的所有内容 感谢各位的提示 我没有注意到 q
  • 将 3 字节立体声 WAV 文件转换为 numpy 数组

    我收到了一个连续水下录音的大型 WAV 文件 我想将其转换为 numpy 数组进行分析 我正在努力做到这一点 到目前为止我有 import numpy as np import scipy as sp import wave as wv i
  • 从 VB.NET 编码过渡到 C# 的好练习吗?

    中级 高级 VB NET Web 程序员应该做哪些练习来掌握 C 语法 我想一些很好的例子是 运行全部 C 语法的算法或项目练习 参考资料 VB NET 程序员应注意的主要语法差异列表 我认为最好的锻炼就是为自己创造一些东西 通过这种方式
  • 是否有任何 Python IDE 可以像 R 一样让您运行选定的代码? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我认为这对于初学者来说是一
  • 在 Swift 中,为什么子类方法不能覆盖超类中协议扩展提供的方法

    我知道这个问题的标题很令人困惑 但奇怪的行为在下面的示例中进行了解释 protocol Protocol func method gt String extension Protocol func method gt String retu
  • BadImageFormatException 调试以 x64 模式运行的网站

    这个论坛里有很多关于这个的问题BadImageFormatException 但没有一个完全符合我的问题 我有一个包含多个项目的解决方案 当我在 调试 或 发布 任何 CPU 中运行时 一切正常 然而 当我切换到 x64 并运行我的 ASP
  • 运行 AspectJ 会导致 NoSuchMethodError: Aspect.aspectOf

    我有一个非常简单的 AspectJ 方面 使用 AspectJ 它只打印出一条日志消息 我的目标是在我的 Android 应用程序中提供建议代码 现在 只要我的应用程序源代码中有方面类本身 这个方面就可以完美地工作 一旦我将方面移动到不同的
  • 如何测试类型是否是具有非类型参数的模板的特化?

    我想知道是否有任何解决方案来查找类型是否是采用非类型参数而不指定每种类型的模板的特化 例如 如果有一个这样的类 template
  • jQuery 中的类名更改事件

    当元素类更改时 有没有办法在 jQuery 中触发事件 例子 img class selected into img class selected newclass 触发事件 And img class selected into img
  • pyodbc 和 mySQL

    我无法使用 pyodbc 连接到 mySQl 数据库 这是我的脚本的片段 import pyodbc import csv cnxn pyodbc connect DRIVER MySQL ODBC 3 51 Driver SERVER l
  • MacOS“配置:错误:无法运行 C 编译的程序”

    我对 MacOS 环境相当陌生 之前在编译 C 脚本时遇到了一些问题 我遇到了以下问题 fatal error stdio h No such file or directory include
  • Angular 4 动画不适用于 Safari iOS 9.3

    我目前正在所有可能的浏览器中测试我的应用程序 我发现角度动画在 Safari iOS 9 3 中的行为与预期不符 下班后 花了几个小时试图解决这个问题 我来寻求帮助 提前致谢 我的代码如下 包 json dependencies angul
  • Spring 3.1 自动装配在自定义约束验证器中不起作用

    我在自定义约束验证器内自动装配 bean 时遇到问题 约束验证器实例不是使用 Spring 的 LocalValidatorFactoryBean 给出的 JSR 303 提供程序是 hibernate validator 4 2 0 Fi