我遇到了使用 Groovy 类进行JSR-303 bean验证的问题,该类使用其他字段(以及它们的约束)实现Traits。让我举个简单的例子。我有一个名为ClientInfo
的课程,如下所示:
class ClientInfo implements AddressInfo, ContactInfo, BusinessEntity { }
它实现了3个提供额外信息的特征。 AddressInfo
可能如下所示:
trait AddressInfo {
@Size(max = 128)
@SafeHtml(whitelistType = SafeHtml.WhiteListType.NONE)
String contactName
@Size(max = 255)
@SafeHtml(whitelistType = SafeHtml.WhiteListType.NONE)
String addressLine1
@Size(max = 255)
@SafeHtml(whitelistType = SafeHtml.WhiteListType.NONE)
String addressLine2
@Size(max = 32)
@SafeHtml(whitelistType = SafeHtml.WhiteListType.NONE)
String postalCode
@Size(max = 64)
@SafeHtml(whitelistType = SafeHtml.WhiteListType.NONE)
String city
@Size(max = 3)
@SafeHtml(whitelistType = SafeHtml.WhiteListType.NONE)
String countryCode
}
到目前为止一切看起来都不错。约束验证失败时会出现问题。例如,如果countryCode
实例验证期间ClientInfo
字段失败,则会在AddressInfo__countryCode
字段名称下显示错误消息:
{"AddressInfo__countryCode":"size must be between 0 and 3"}
这是由于来自该特征的字段被编译成例如: AddressInfo__countryCode
,AddressInfo__addressLine1
等等,为这些字段提供getter和setter。
我尝试在Jackson
字段@JsonProperty('countryCode')
字段上使用countryCode
注释AddressInfo
,但它没有帮助(注释已添加到已编译的类中) )。
我的问题是:可以使用例如Jackson属性映射器为实现的特征提供的字段在@JsonProperty('...')
注释中提供字段名称?我将非常感谢你的帮助。
PS:我正在使用'org.hibernate:hibernate-validator:5.1.3.Final'
bean验证实现(也许这应该是更改)。