首页 > 解决方案 > Spring Boot @RestController 动态接受不同结构 bean 对象的 @RequestBody 并验证请求

问题描述

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

我检查了几个选项,例如制作请求正文和结构String,但在这些选项中我无法使用注释。MapJSONjavax.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

我正在寻找使用@Valid注释启用 bean 验证来处理上述场景的最佳方法

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

标签: javarestspring-boot

解决方案


使用默认的 spring 提供的实现是不可能的。您应该自己创建一个接受这两种类型(字符串、对象列表)对象的自定义类,然后您应该编写自己的注释来验证这一点。


推荐阅读