Spring @Validated 在服务层

2024-05-21

Hej,

我想使用@Validated(group=Foo.class)在执行方法之前验证参数的注释,如下所示:

public void doFoo(Foo @Validated(groups=Foo.class) foo){}

当我将此方法放入 Spring 应用程序的控制器中时,@Validated当 Foo 对象无效时执行并抛出错误。但是,如果我将相同的内容放入应用程序服务层的方法中,则即使 Foo 对象无效,也不会执行验证,并且该方法只会运行。

你不能使用@Validated服务层的注解?或者我是否必须配置一些额外的东西才能使其工作?

Update:

我已将以下两个 bean 添加到我的 service.xml 中:

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

并替换了@Validate with @Null像这样:

public void doFoo(Foo @Null(groups=Foo.class) foo){}

我知道这是一个非常愚蠢的注释,但我想检查一下,如果我现在调用该方法并传递 null ,它会抛出一个违规异常。那么为什么它执行@Null注释而不是@Validate注释?我知道其中一个来自javax.validation另一个来自 Spring,但我认为这与它没有任何关系?


在 Spring MVC 堆栈的眼中,不存在服务层这样的东西。它起作用的原因@Controller类处理方法是 Spring 使用一种特殊的HandlerMethodArgumentResolver called ModelAttributeMethodProcessor它在解析要在处理程序方法中使用的参数之前执行验证。

我们所说的服务层只是一个普通的 bean,没有从 MVC 添加任何额外的行为(DispatcherServlet) 堆。因此,您不能指望来自 Spring 的任何验证。您需要自己推出,可能使用 AOP。


With MethodValidationPostProcessor,看一下javadoc

适用的方法在其上有 JSR-303 约束注释 参数和/或它们的返回值(在后一种情况下指定 在方法级别,通常作为内联注释)。

可以通过Spring的Validated指定验证组 在包含目标类的类型级别进行注释,应用 该类的所有公共服务方法。默认情况下,JSR-303 将 仅针对其默认组进行验证。

The @Validated注释仅用于指定验证组,它本身并不强制进行任何验证。您需要使用其中之一javax.validation注释如@Null or @Valid。请记住,您可以在方法参数上使用任意数量的注释。

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

Spring @Validated 在服务层 的相关文章

随机推荐

  • 使用 Proc sql 和 Teradata 在 SAS 中编写高效查询

    编辑 这是一组更完整的代码 它准确地显示了下面的答案所发生的情况 libname output data files jeff let DateStart 01Jan2013 d let DateEnd 01Jun2013 d proc s
  • 包含的 CosmosDB Linq 查询不是 IDocumentQuery 类型

    我有一个使用 CosmosDB 的项目 起初我使用了 EFCore 的预览版 但它确实不够成熟 所以我决定选择宇航员 https github com Elfocrash Cosmonaut反而 我有一个 linq 语句 它基本上查看两个属
  • 使用 Webkit 的调试版本运行 Safari

    我通过运行以下命令编译了 webkit 的调试版本 工具 脚本 build webkit debug 成功构建后 我尝试通过运行以下命令来使用已编译的 Webkit 调试版本来运行 safari sudo Tools Scripts run
  • 我可以从 HTTP 请求中找到无线接入点的 BSSID(MAC 地址)吗?

    假设有人在咖啡店里无线连接到互联网 并向 johnsveryownserver com 发送 HTTP 请求 服务器端 有什么方法可以确定我的MAC地址吗 无线接入点他们连接到什么 请注意 我对他们机器的 MAC 地址不感兴趣 如果我无法使
  • 如何使用 Ansible 遍历嵌套的 dict 结构?

    我在 ansible 剧本中有以下 dict 结构变量 apache vhosts name foo server name foo com server aliases a foo com b foo com c foo com name
  • APNS(Apple 推送通知服务器)的反馈服务

    我们正在使用Java作为推送通知提供商APNS I我能够将消息发送到APNS但我不知道如何获得该消息的反馈 请帮忙 反馈服务具有类似于用于发送推送通知的接口的二进制接口 您可以通过以下方式访问生产反馈服务feedback push appl
  • 正则表达式可以与 C++ 中的字符数组一起使用吗

    我正在开发一个无法使用字符串库文件的程序 而是使用字符数组 我能够使用正则表达式 并且想知道是否有办法使用正则表达式和字符数组 甚至正则表达式和单个字符 我问的原因是当我尝试在匹配中使用我的 char 数组时 xUtility 会抛出一堆来
  • CSS Overflow 属性在 iPad 中不起作用

    我正在为 iPad 设计一些 html 页面 在尝试像 yscroll auto 这样的 css 溢出属性时 iPad 中没有出现滚动条 内容也没有滚动 我在 ipad 模拟器和设备中尝试过 有没有其他方法可以实现这个属性 请帮帮我 提前致
  • Google App Engine queue.yaml 无法在开发服务器中工作

    我无法让 dev appserver py 识别我使用queue yaml 创建的自定义队列 他们没有出现在http localhost 8000 taskqueue http localhost 8000 taskqueue 当我尝试向其
  • jQuery 中的 Javascript .files[0] 属性

    jQuery 中是否有与此语句等效的语句 var value document getElementById id files 0 使用附加 files 0 的标准 jQuery 选择器似乎不起作用 并且我找不到与 files 等效的 jQ
  • 无法读取序列化诊断文件:无效文件:无效诊断签名

    我收到这个奇怪的警告 我不确定是什么原因造成的 A dia https filext com file extension DIA文件扩展名据称表示核心有向图图形文件 我没有添加一个 该应用程序几乎没有用户界面 无法读取序列化诊断文件 错误
  • 如何使用键盘和鼠标控制相机 - Three.js

    我在 WEB GL 中有一个带有 Three js 的 3D 环境 并且我曾经使用 Orbitcontrols js http codepen io nireno pen cAoGI http codepen io nireno pen c
  • asp.net mvc 文件流结果

    问题的第一部分 我在数据库中有信息 我想从数据库获取它并将其另存为 txt文件给客户端 我已经用常规的 asp net 完成了它 但在mvc中还没有 我的信息不是图像 这些关于人民的信息 我看着这个网站 http www mikesdotn
  • Linux:如何设置进程的时区?

    我需要设置在 Linux 机器上启动的各个进程的时区 我尝试设置TZ变量 在本地上下文中 但它不起作用 有没有一种方法可以使用与系统日期不同的系统日期从命令行运行应用程序 这可能听起来很愚蠢 但我需要一种sandbox系统日期将被更改的地方
  • 在 C# 中引发事件[重复]

    这个问题在这里已经有答案了 我在微软练习测试中遇到了这个问题 我很困惑 这是问题 以下哪个 C 代码示例 是引发事件的正确方式 假设警报事件 AlarmEventArgs 类 以及 AlarmEventHandler 委托已 宣布 这是他们
  • 将 div 设置为 post 方法结果页面的目标容器

    我有一个 div 标签 也分为两个 div 这是代码 div div div div
  • Java HashMap 嵌套泛型与通配符

    我正在尝试创建包含自定义类的不同子类的哈希集的哈希映射值的哈希映射 如下所示 HashMap
  • 浏览器中缺少 Angular 12 源地图

    我们已经升级到角12最近遇到一个问题 即浏览器源映射丢失 因此我们无法调试我们的组件文件 因为没有任何组件文件 谁能建议我缺少什么 Angular 12 更改了默认的 ng build 以使用 生产 配置 你想要 sourceMap 所以尝
  • 如何在qt中创建正确的退出按钮

    我正在尝试创建一个退出按钮来正确关闭我在 QT 中制作的 GUI 我尝试通过以下方式执行此操作 include
  • Spring @Validated 在服务层

    Hej 我想使用 Validated group Foo class 在执行方法之前验证参数的注释 如下所示 public void doFoo Foo Validated groups Foo class foo 当我将此方法放入 Spr