在Spring Boot中,我尝试创建一个@RestController,该@RequestBody应该接受@Valid的不同结构,并使用String批注验证bean。

我检查了几个选项,例如使请求正文为MapJSONjavax.validation.Valid结构,但是在这些选项中,我无法使用type注释。

我的请求主体架构如下

模式1

{
  "type": "type1",
  "message": "String value"
}


模式2

{
  "type": "type2",
  "message": [
    {
      "key1": "value",
      "key2": "value"
    },
    {
      "key1": "value",
      "key2": "value"
    }
  ]
}


根据请求中的message键,message键持有不同的结构值。在模式1中,String键具有message值,在模式2中,List of Object键具有@Valid作为值

我正在寻找通过注释启用bean验证来处理上述情况的最佳方法

任何帮助将不胜感激。谢谢!

最佳答案

您可以在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的消息中执行相同的操作。

关于java - Spring Boot @RestController动态接受不同结构bean对象的@RequestBody并验证请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55644331/

10-12 00:19
查看更多