Spring RequestBody可选验证

Ber*_*diz 3 java spring spring-mvc

我有一个REST API控制器,如下面的代码.如果我使用@valid注释,则控制客户实体的每个字段以进行验证.

@ResponseBody
@RequestMapping(value = API.UPDATE_CLIENT, produces = ResponseType.JSON, method = RequestMethod.POST)
public HashMap update(
        @PathVariable(value = "id")int id,
        @RequestBody Client clientData
) {

    clientLogic.update(id, clientData);

    ....
}
Run Code Online (Sandbox Code Playgroud)

客户的实体包含大约5个字段(ID,姓名,地址,电子邮件,电话).当我更新此记录时,我不会在RequestBody中发送所有5个字段.我只想验证来自RequestBody.

ale*_*xbt 8

可以使用spring @Validated代替并使用groups.如果我理解正确,将设置一些值,其他值则不会.所以,问题只在于Null检查.你想暂时允许空值.

(1)创建要用作的接口

public interface NullAllowed {}
Run Code Online (Sandbox Code Playgroud)

(2)将支票分配给NullAllowed

@Email(groups = NullAllowed.class) //email allows null, so you are good
private String email;

@NotNull //skip this check - not assigned to NullAllowed.class
@Size(min=1, groups = NullAllowed.class)
private String name;
Run Code Online (Sandbox Code Playgroud)

(3)使用@Validated并指定要验证的组

public HashMap update(
    @PathVariable(value = "id")int id,
    @Validated(NullAllowed.class) @RequestBody Client clientData)
Run Code Online (Sandbox Code Playgroud)

仅验证标记为NullAllowed.class的检查.


看一下这个: