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

强制验证批注提供消息

糜帅
2023-03-14

我正在使用Hibernate验证器进行POJO验证,并且我还创建了一些自定义验证。这是一个例子:

//lombok annotations
public class Address {
  @NotNull // standard
  @State //Custom created
  String country;
}

我们需要用特定的代码而不是消息来表示所有的验证错误。为了实现这一点,我们决定在使用的每个注释中指定代码。上面的示例现在看起来像这样:

//lombok annotations
public class Address {
  @NotNull(message="ERR_001")
  @State(message="ERR_002")
  String country;
}

但是这种方法有一个问题。我们不能强迫在注释中一直提供消息(在我们的例子中是错误代码)。对于自定义注释,它仍然是可以的,因为我们不提供默认消息,但是对于标准注释,有可能会错过它,如果我们不小心错过了提供自定义消息,就会悄悄地生成一个字符串消息。

是否有一种方法可以强制在注释中始终提供消息。保持一致性可能会有所帮助。

共有3个答案

胥玮
2023-03-14

我找不到一个好办法来处理它。但目前我已经实施了一项测试,让我们对它有一些控制。这不是最好的解决方案,但目前解决了这个问题。

我使用classgraph来读取包内POJO类的所有注释,并在javax验证时对其进行过滤,如果默认消息似乎来自< code>javax.validation,那么我将添加到一个列表中。在稍后的单元测试中,我检查这个列表是否为空。

private List<String> getAnnotationProperties(String appliedOn, AnnotationInfoList annotationInfos) {
    return annotationInfos.stream()
            .filter(annotationInfo -> annotationInfo.getName().contains("javax.validation.constraints"))
            .filter(annotationInfo -> ((String) annotationInfo.getParameterValues().getValue("message")).contains("javax.validation.constraints"))
            .map(annotationInfo -> annotationInfo.getName())
            .collect(Collectors.toList());
    }
岑俊弼
2023-03-14

VII ntu-Checkstyle为Checkstyle提供了额外的检查,包括检查注释是否与所有必需的参数一起使用。

<module name="RequiredParameterForAnnotation">
  <property name="annotationName" value="NotNull"/>
  <property name="requiredParameters" value="message"/>
</module>
锺星腾
2023-03-14

据我所知,没有办法做到这一点。也许最好的选择是创建自己的注释并使属性成为必需的。

 类似资料:
  • 我已经构建了一个自定义凭据提供程序,它在Windows SDK中作为示例提供。它在计算机上工作得很好。 当CR安装在远程服务器上,人们通过RDP连接到它时,会两次提示用户输入用户名/密码对,第一次是在本机RDP客户端中,第二次是在自定义凭据提供程序本身中,当用户通过本机RDP客户端成功登录时。 有没有办法获取第一步输入的用户名和密码,并将其写入CR字段。

  • 在HTML方面,我有一个表单,它有两个textbox,这两个textbox包含名称和值。当用户输入一个大于10个字符大小的值时,我想显示一个类似“值大于10个字符”的定制消息。 我试过这个 但似乎不起作用。我仍然会收到丑陋的Java消息

  • 出于某种原因,即使在我打开Vk provider并填写所有ID/clientsecrets之后,页面返回未找到的。有关于如何使Vk身份验证提供程序工作的完整教程吗?

  • 此外,如果spring bean中有注释,那么是否有一种方法可以验证注入的bean是否具有正确的作用域。我的假设是,如果您将原型作用域bean注入到单例作用域bean中,很可能这不是您想要的。虽然在某些用例中,这是开发人员想要的,但在我们的案例中,到目前为止,这主要是开发人员的错误。

  • 我有一个spring rest服务,它接受Person对象。Person对象具有名称、电话号码和电子邮件。当添加一个人时,电话号码是强制性的。如果存在电话号码属性,它将使用或或验证是否为空。但是如果属性不存在,验证就不起作用。请建议提供任何验证注释,以检查JSON请求中是否存在该属性。 以下是请求体测试用例 {“name”:“anu”,“phonenumber”:“”,“email”:“test@

  • 我的目标是使用凭据进行两步身份验证。第一步是检查具有主体的用户是否在特殊数据库表中具有角色。其次是执行标准ldap身份验证。 我需要的是同时执行这两项检查,但身份验证提供程序的常见方法是在任何身份验证提供程序首次成功后声明身份验证成功。因此,我决定创建一个自定义的 AuthenticationProvider 实现,它调用 LdapAuthenticationProvider,然后执行数据库检查逻

  • 问题内容: 我的Web应用程序有多个身份验证管理器(一个用于API,一个用于WEB访问)。该api应该仅具有基本的身份验证服务- 通过spring安全标记进行配置,如下所示: 我无法内联身份验证提供程序,因为我希望它可以被子bean配置覆盖。 我的问题是我无法在security:authentication-provider元素上定义别名/ id以在身份验证管理器中引用它。有一个简单的解决方法吗?