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

获取bean验证失败的字段名

沈良策
2023-03-14

因此,我正在对其执行JSR-303 bean验证的类有两个字段,每个字段都应用了相同的模式约束:

@Column(name="test_suite_revision")
@XmlElement(name="test_suite_revision")
@NotNull
@Pattern(regexp = "\\d\\d-\\d\\d-\\d\\d\\d\\d", message = "value must be of the form xx-xx-xxxx")
private String revisionTestSuite;

@Column(name="test_revision")
@XmlElement(name="test_revision")
@NotNull
@Pattern(regexp = "\\d\\d-\\d\\d-\\d\\d\\d\\d", message = "value must be of the form xx-xx-xxxx")
private String revisionTest;

重要信息-此类不是经典Spring MVC webapp中的表单支持类,而是位于web服务基础上的实体类。因此,验证正在服务中进行。

现在,使用web服务的web客户端是一个Spring MVC,它有一个表单支持bean,该bean与jsp绑定,并带有放置错误消息的位置。

因此,假设用户在这两个字段中的一个字段中输入了格式不正确的字符串。我可以用这个非常标准的代码片段来捕获它

    Set<ConstraintViolation<TestCase>> violations = validator.validate( permit);
    if( !violations.isEmpty()) {
        logger.debug( "basic validation FAILED with " + violations.size() + " errors");
        Iterator<ConstraintViolation<TestCase>> iter = violations.iterator();
        while( iter.hasNext()) {
            ConstraintViolation<TestCase> cv = iter.next();
            logger.debug( "invalidValue:" + cv.getInvalidValue());
            logger.debug( "message:" + cv.getMessage());
            ConstraintDescriptor<?> cd = cv.getConstraintDescriptor();
            Map<String, Object> mapp = cd.getAttributes();
            for( String keey : mapp.keySet()) {
                logger.debug("mapp key:" + keey + ":" + mapp.get(keey));
            }

上面写着

basic validation FAILED with 1 errors
invalidValue:050607
message:value must be of the form xx-xx-xxxx
mapp key:message:value must be of the form xx-xx-xxxx
mapp key:payload:[Ljava.lang.Class;@1367702
mapp key:flags:[Ljavax.validation.constraints.Pattern$Flag;@bf5210
mapp key:groups:[Ljava.lang.Class;@a49be5
mapp key:regexp:\d\d-\d\d-\d\d\d\d

问题是:如何找出哪个字段未通过验证?我似乎找不到从ConstraintViolation对象或ConstraintDescritpor对象中提取字段名“revisionTest”或“revisionTestSuite”的方法。

版本1.1.0中新增的getValidationApplicationTo()方法。javax的最终版本。验证api似乎很有前途,但到目前为止,该方法在运行时抛出了AbstractMethodError。呃。

TIA,

仍在学习Steve

共有1个答案

滕项明
2023-03-14

请参阅ConstraintViolation#getPropertyPath方法:

/**
 * @return the property path to the value from {@code rootBean}
 */
Path getPropertyPath();

路径。Node#getName将为您提供属性名称。对于嵌套bean中的字段名称,您必须遍历路径。

 类似资料:
  • 您好,我在构建python映像时遇到问题 错误说, 但是当升级pip时,同样的错误显示。 错误:由于环境原因无法安装程序包错误:HTTPSConnectionPool(host='files.pythonhosted.org',port=443):url超过最大重试次数:/packages/ac/cf/0cc542fc93de2f3b9b53cb979c7d118cffb93204afb4629a

  • 我有一个电子签名/数字签名的PDF,该文档在分离签名中使用iText lib进行签名。我在验证签名时遇到问题,收到消息“签名者身份无效,因为它已过期或尚未有效”,并且在签名者信息中“构建从签名者证书到颁发者证书的路径时出错。” 我尝试了很多方法来验证签名,但都没有成功。如果我明确地将签名者证书添加为可信证书,那么我会得到一个绿色检查,并能够验证签名,但我认为这不是正确的方法。 数字签名的pdf可以

  • 我正在尝试使用python从web获取数据。我导入了urllib。请求包,但在执行时,我得到错误: 我正在Mac OS High Sierra上使用Python 3.7 当我将URL更改为“http”时,我能够获取数据。但是,我相信,这可以避免检查SSL证书。 因此,我在互联网上查找并找到了一个解决方案:运行 这解决了我的问题。但是我对SSL之类的东西一无所知。你能帮我理解它到底做了什么来解决我的

  • - 我运行了此脚本,但出现了此错误。我怎么做?

  • 我正在使用Springboot和Thyemleaf,试图用javax验证我的表单数据。验证。约束注释。 在我的模板中,我使用了一个Thyem立夫命令对象,它是我的模型类。在模型中,我有一些经过验证的字段- 这是用于输入文本/标题的超文本标记语言- 以下是提交表单时endpoint的控制器- 在我的模板中,我可以提交表单,如果或为空并且插入了带有消息的新div,将返回字段错误。 我遇到字段列表问题