当前位置: 首页 > 知识库问答 >
问题:

Spring靴 立面验证的最佳方法

寇升
2023-03-14

我将Spring Boot与Kotlin结合使用,我的项目被划分为多个模块,其中应用层包含REST控制器和外观,域层包含服务和业务逻辑,基础设施层用于与外部服务或数据库通信。我认为(但我可能是错的)基本验证的最佳位置是notNull、notEmpty、max和min、size等。是facade,因为REST控制器和另一个模块都与它通信,但问题是像@Valid这样的javax验证注释只在REST控制器层上工作(在具有注释@RestController的类中),当我试图为这个facade创建一些测试时,具有错误值的字段返回NullPointerException,而不是methodgargumentnotvalidexception。我试图创建WebMvcTest,但也返回了错误的异常。它是某种解决方案吗?我发现我可以在方法内部调用一些验证器,但是这看起来比在方法的参数上做注释要复杂得多。

共有1个答案

薛淳
2023-03-14

您可以将javax.validation.Validator注入到任何Spring组件中。例如,到外观组件中,并在外观层中执行验证:

@Autowired
Validator validator;

Set<ConstraintViolation<UserRequestDTO>> violations = validator.validate(userRequest);

这样,您就可以从控制器中删除< code>@Valid注释。这种方法将验证结果置于您的控制之下。

 类似资料:
  • 每次路由转换时验证令牌。为此,我必须在每次要验证时进行rest调用。 只通过一次rest调用验证令牌一次,然后将令牌存储在本地存储中。(令牌本身只有一个布尔值指示它是否通过了身份验证) 我关心的是不要在每一个路由事务中进行rest调用,我不想消耗那么多http流量。但是,如果没有别的办法,我会这么做的。

  • 我只是想知道如何实现这一点的当前最佳实践是什么,所以我一定会走上正确的道路。

  • 问题内容: 我敢肯定,以前必须以不同的方式询问过这个问题- 因为isEmptyOrNull很常见,但人们以不同的方式实现它。但是我在最好的可用方法方面有以下好奇的查询,这对内存和性能都有好处。 1)下方不考虑所有空格,例如在XML标签为空的情况下 2)低于一保重但修剪会降低性能和记忆力 3)将两者结合可以节省一些性能和内存(克里斯在评论中建议) 4)转换为模式匹配器(仅在字符串长度不为零时调用)

  • 问题内容: 在没有信用卡号且没有其他信息的情况下,PHP中确定该号码是否为有效号码的最佳方法是什么? 现在,我需要可以与American Express,Discover,MasterCard和Visa一起使用的功能,但是如果它也可以与其他类型的功能一起使用,可能会有所帮助。 问题答案: 卡号验证分为三个部分: 模式 -是否与发行者模式(例如VISA /万事达卡等)匹配 CHECKSUM- 它是否

  • 这并不困难,但它让我质疑spring auth服务器是最好的选择,还是我应该使用Keycloak?