我打算使用相同的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
字段成为第一个请求的可选字段,并且第二个请求是必需的,但除了手动检查第二个请求的控制器方法并抛出异常之外,找不到任何东西。
有没有其他方法可以实现这一目标?
答案 0 :(得分:1)
这可以使用验证组来实现。这需要一个标识符类或接口。
所以你可以这样做:
=>定义验证组标识符。它可以是一个类或接口。
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){
...
}
答案 1 :(得分: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
组。