我试图让Kotlin在spring-data-rest项目上使用JSR303验证。
给定以下数据类声明:
@Entity data class User(
@Id
@GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)
var id: Long? = null,
@Size(min=5, max=15)
val name: String
)
提前感谢您的帮助!
您需要使用注释use-site目标,因为当有多个可用选项时,构造函数中声明的属性的默认目标是构造函数参数上的注释,而不是getter(兼容JavaBeans的主机将看到getter)。此外,在这里使用data
类可能也不合适(请参见末尾的注释)。
@Entity data class User(
@Id
@GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)
var id: Long? = null,
@get:Size(min=5, max=15) // added annotation use-site target here
val name: String
)
Kotlin文档中的property
目标看起来可能很诱人,但它只能从Kotlin而不是Java中看到。通常get
会起作用,并且在beanset
上不需要它。
文件将流程描述为:
而@size
批注是:
@Target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})
因此,由于parameter
是一个有效的目标,并且有多个目标可用(参数、字段、方法[get/set]),所以它选择了不是您想要的parameter
。因此,JavaBean主机要查看属性,它将查找getter(属性由getter/setter定义,而不是由backking字段定义)。
java prettyprint-override">public class Book {
private String title;
private String description;
// ...
@NotEmpty(groups={FirstLevelCheck.class, Default.class})
@Size(max=30)
public String getTitle() {
return title;
}
// ...
}
注意:正如其他人的注意所提到的,如果实体使用自动生成的ID,您可能应该考虑不为它们使用data
类,因为新对象和检索的对象不存在data
类;而data
类将生成equals
和hashcode
以包含所有字段,包括不应该包含的字段。您可以从Hibernate文档中阅读有关这方面的指导。
这没有任何影响。有什么想法吗? 我用一个示例项目创建了一个存储库来再现这个案例:https://github.com/mduesterhoeft/bean-validation-container-constraints
我使用Jersey 2.19来实现REST API,但是我很难让资源验证像我预期的那样工作。 我的资源是这样的。 当我发出以下cURL请求时: 我在终端窗口中得到以下响应: 也就是说,的值是,正如Java EE教程中定义的那样,不会引发异常。
这是用Kotlin编写的User类: 这就是测试: 无效的角色映射为NULL。 这里有一个示例项目,以防您想尝试一些东西。
我正在尝试使用自定义Bean验证来验证应该大于零的数值,但问题是使用如下单个自定义验证器来验证任何数值:整数、浮点数、双......: 整数int; @PositiveNumber双倍双; 这可能吗?
我有一个数据类(如下所示) 在下面给出的另一个函数中,我将其作为参数调用 如何直接在kotlin中检查请求是否不为null?