在Spring Boot中,我试图创建一个@RestController
,它应该接受@RequestBody
的不同结构,并使用@Valid
批注来验证bean。
我检查了几个选项,例如制作请求正文String
,Map
和JSON
结构,但是在这些选项中,我无法使用javax.validation.Valid
注释。
我的请求正文架构如下
模式1
{
"type": "type1",
"message": "String value"
}
模式2
{
"type": "type2",
"message": [
{
"key1": "value",
"key2": "value"
},
{
"key1": "value",
"key2": "value"
}
]
}
基于请求type
键中的message
键,它具有不同的结构值。在模式1 中message
键的值为String
,在模式2 message
键的值为List of Object
< / p>
我正在寻找通过@Valid
批注启用Bean验证的最佳方法来处理上述情况
任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
您可以在Bean级别上做到这一点。
喜欢
@NotNull
@Size(min=2, max=30)
private String name;
请参阅以下链接
https://spring.io/guides/gs/validating-form-input/
https://www.baeldung.com/spring-boot-bean-validation
要从一个bean切换到另一个bean,可以在获得bean类型后使用切换用例或在服务层中添加@Valid而不是rest controller(API)层。
public methodName(@Valid ObjectName object){
.....
}
在Bean中,您可以声明
数据类型;
@有效 数据类型消息;
然后在名为bean的消息中执行相同的操作。
答案 1 :(得分:0)
不可能使用默认的spring提供的实现。您应该自己创建一个接受两种类型的对象(字符串,对象列表)的自定义类,然后编写自己的注释来对此进行验证。