Spring Boot @RestController动态接受不同结构bean对象的@RequestBody并验证请求

时间:2019-04-12 04:02:51

标签: java rest spring-boot

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

我检查了几个选项,例如制作请求正文StringMapJSON结构,但是在这些选项中,我无法使用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验证的最佳方法来处理上述情况

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

2 个答案:

答案 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提供的实现。您应该自己创建一个接受两种类型的对象(字符串,对象列表)的自定义类,然后编写自己的注释来对此进行验证。