java - Micronaut 嵌套 Json 输入验证

标签 java micronaut

你如何验证 Json Body

{
  "name": "good student",
  "marks": {
    "math": "122",
    "english": "12"
  }
}
这不起作用,它接受 JSON 正文中有或没有标记,即使 @NotNull 等被添加到 Student DTO 中的标记
@Introspected
public @Data class Student {
    @NotBlank
    private String name;
    
    @Valid
    @JsonProperty("marks")
    private Marks marks;
    
    @Introspected
    static @Data class Marks{
        @NotBlank
        private String math;
        @NotBlank
        private String english;
    }
}
用@Validated 注释的 Controller
用@Valid @Body 注释的方法参数

最佳答案

这在 Micronaut 2.0.3 版中对我有用:

@Introspected
public @Data class Student {
    @NotBlank
    private String name;

    @Valid
    @NotNull
    private Marks marks;

    @Introspected
    static @Data class Marks{
        @NotBlank
        private String math;

        @NotBlank
        private String english;
    }
}
字段 marks应注解:
  • @NotNull - 告诉 validator 它必须存在
  • @Valid - 告诉 validator 它必须验证嵌套字段

  • 示例 Controller 如下所示:
    @Validated
    @Controller("/students")
    public class StudentController {
        @Post
        public void create(@Valid @Body Student student) {
            // do something
        }
    }
    
    通过 curl 测试:
    curl -v -X POST http://localhost:8080/students -H 'Content-Type: application/json' -d '{"name":"John"}' | jq
    
    有了这个回应:
    {
      "message": "student.marks: must not be null",
      "_links": {
        "self": {
          "href": "/students",
          "templated": false
        }
      }
    }
    

    关于java - Micronaut 嵌套 Json 输入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66433629/

    相关文章:

    java - 如何计算构建哈希表所需的最大/最小探针数

    java - 如何通过执行 Prepared Statement 获取 boolean 值?

    java - Catalina 6.x 的启动和停止在 8.x 中成为最终的

    java - 有没有办法可以在 micronaut 中注入(inject)一个其构造函数具有参数的类?

    java - 如何使用参数指定分段文件上传

    java - 从属性中获取带有 url 的 Micronaut HttpClient

    java - ssh4 延迟初始化异常

    javascript - java中如何将数组转换为多个变量

    amazon-web-services - 如何在属于 AWS Lambda 代理的 Micronaut API 实现中获取 "requestContext"数据

    java - Micronaut 与 AWS Lambda 和 SQS