【问题标题】:Marking a field as mandatory in the request body for a specific request在特定请求的请求正文中将字段标记为必填
【发布时间】:2018-07-30 22:37:45
【问题描述】:

我打算使用与请求正文相同的 bean 来创建/更新/删除配置文件(取决于请求方法)。更新有两种情况。首先是更新配置文件,其中可以更新除 emailAddress 之外的任何参数,如 firstName、lastName 等,第二个是仅更新 emailAddress。对于第一种情况,newEmailAddress 是可选的,但对于第二种情况,newEmailAddress 字段是必需的。 下面是一个示例 bean:

class ProfileModel {
    @NotEmpty
    @Email
    private String emailAddress;

    @Size(max=30)
    private String firstName;

    @Email
    private String newEmailAddress;

    .
    .
    .

}

我创建了不同的 API 端点来更新个人资料和更新电子邮件地址。我试图找到一种方法使newEmailAddress 字段对于第一个请求是可选的,对于第二个请求是必需的,但是除了手动检查第二个请求的控制器方法并抛出异常之外什么也找不到。

还有其他方法可以实现吗?

【问题讨论】:

    标签: spring hibernate rest hibernate-validator


    【解决方案1】:

    验证组应该可以解决您的问题。请参阅 beanvalidation.org 或 hibernate-validator documentation page 上的示例。 基本上,您需要将组属性值添加到注释约束中。比如:

    class ProfileModel {
        @NotEmpty
        @Email
        private String emailAddress;
    
        @Size(max=30)
        private String firstName;
    
        @Email(groups= UpdateEmail.class)
        private String newEmailAddress;
    

    然后在您的控制器上使用 Springs @Validated 注释,它允许您传递要验证的组。 一个端点可以使用这个UpdateEmail 组,另一个端点可以使用Default 一个。

    【讨论】:

      【解决方案2】:

      这可以使用验证组来实现。这需要一个标识符类或接口。

      所以你可以这样做:

      => 定义验证组标识符。它可以是类或接口。

      public interface MyValidationGroup{}
      

      => 在请求正文中指定验证组。

      class ProfileModel {
         @NotEmpty
         @Email
         private String emailAddress;
      
         @Size(max=30)
         private String firstName;
      
         @Email
         @NotBlank(groups={MyValidationGroup.class})
         private String newEmailAddress;
      
          .
          .
          .
      
      }
      

      => 指定控制器方法的验证组。

      public ProfileModel add(@Validated({MyValidationGroup.class}) 
                                    @RequestBody ProfileModel profile){
         ...
      }
      

      【讨论】:

        猜你喜欢
        • 2017-11-11
        • 1970-01-01
        • 2013-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 2020-12-26
        相关资源
        最近更新 更多