【问题标题】:Spring Boot @RestController accept @RequestBody of different structure bean object dynamically and validate the requestSpring Boot @RestController 动态接受不同结构 bean 对象的 @RequestBody 并验证请求
【发布时间】:2019-04-12 04:02:51
【问题描述】:

在 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"
    }
  ]
}

基于请求中的typemessage 键持有不同的结构值。在 Schema 1 message 键具有 String 值,在 Schema 2 message 键具有 List of Object 作为值

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

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

【问题讨论】:

    标签: java rest spring-boot


    【解决方案1】:

    你可以在 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 类型后使用 switch case 或在服务层而不是在 rest 控制器(API)层添加 @Valid。

    public methodName(@Valid ObjectName object){
    .....
    }
    

    在Bean中,可以声明

    数据类型类型;

    @有效 数据类型消息;

    然后你在名为 bean 的消息中做同样的事情。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-02-07
        • 2018-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-06
        • 1970-01-01
        • 2023-01-13
        • 2020-10-18
        相关资源
        最近更新 更多