gpt4 book ai didi

java - 将类型级别验证错误消息附加到特定字段

转载 作者:行者123 更新时间:2023-11-29 03:25:37 29 4
gpt4 key购买 nike

我有一个简单的类,它使用 boolean isValid() 方法进行了验证,该方法有效,当然错误消息是在类/类型级别。

这是我的简单类:

public class NewPasswordDTO {
@NotNull
public String password;

@NotNull
public String confirmation;

@AssertTrue(message="Passwords must match.")
protected boolean isValid() {
return password.equals(confirmation);
}
}

但我真正想要的是这样的东西:

public class NewPasswordDTO {
@NotNull
@Equals("confirmation", message="...")
public String password;

@NotNull
public String confirmation;
}

因此错误消息将设置在字段级别而不是类/类型级别。

这有可能吗?也许为该类使用自定义 validator ?

提前致谢!

解决方案:

感谢 Gunnar!我刚刚想出了一个不错的通用解决方案 :-)。我只是使用(意味着复制和粘贴)来自 Hibernates @ScriptAssertScriptAssertValidator 的代码并稍作修改:

@ScriptAssert:

  • 添加新的 String field()。 (这是附加错误消息的地方)

ScriptAssertValidator:

  • initialize 方法中,确保还保存了 fieldNamemessage 属性,因为我们需要在下一步

  • isValid 方法的底部添加此代码段:

    context.buildConstraintViolationWithTemplate(errorMessage)
    .addPropertyNode(fieldName).addConstraintViolation();

  • 同时在 isValid 方法中的某处添加 context.disableDefaultConstraintViolation(); 以不生成默认错误消息,否则将在类级别附加该错误消息。

就是这样。现在我可以像这样使用它了:

@FieldScriptAssert(lang="javascript", script="_this.password.equals(_this.confirmation)", field="password", message="...")
public class NewPasswordDTO { ... }

最佳答案

您可以在类上使用 @ScriptAssert 约束(请注意,约束应该始终没有副作用,因此改变已验证 bean 的状态不是一个好主意;相反你应该只检查这两个字段是否匹配)或者你实现一个自定义的类级约束。

后者 also allows指向约束违规的自定义属性路径,它允许将“确认”属性标记为错误而不是整个类。

关于java - 将类型级别验证错误消息附加到特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21222927/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com