Spring boot 和 Bean validation 的不同方法和相同的方法 class

Spring boot and Bean validation in different methods and the same class

我正在使用 spring 引导进行休息 web 服务,我想知道是否可以通过在控制器层中使用 POJO 作为参数的方法使用 bean 验证注释进行不同的验证。

示例:

POJO:

    Public class Person{
            @NotNull(forMethod="methodOne")
            private String firstName;
            @NotNull(forMehotd="methodTwo")
            private String lastName;
            private String age;

            //getter and setter
    }

控制器

    @RestController
    public class controller{

        @RequestMapping(....)
        public ResponseEntity methodOne(@Valid @RequestBody Person person){
            .....
        }

        @RequestMapping(....)
            public ResponseEntity methodTwo(@Valid @RequestBody Person person){
            ......
        }
    }

我知道在方法中使用单独的参数是可能的,但我有一个具有这么多属性的 POJO。可以做类似的事情吗?

我认为您应该在 bean 验证注释中使用 validation groups 并使用 @Validated 注释而不是 @Valid 注释。因为 @Validated 注释有一个 value 属性指定了一个验证组。

例如:

Public class Person{
        @NotNull(groups={MethodOne.class})
        private String firstName;
        @NotNull(groups={MethodTwo.class})
        private String lastName;
        private String age;

        //getter and setter
}

@RestController
public class controller{

    @RequestMapping(....)
    public ResponseEntity methodOne(@Validated(MethodOne.class) @RequestBody Person person){
        .....
    }

    @RequestMapping(....)
        public ResponseEntity methodTwo(@Validated(MethodTwo.class) @RequestBody Person person){
        ......
    }
}

顺便说一下,不要忘记您应该创建 MethodOneMethodTwo 接口以将它们用作您的验证组。