Spring RequestBody可选验证

时间:2016-10-30 22:13:27

标签: 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);

    ....
}

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

1 个答案:

答案 0 :(得分:8)

可以使用spring的@Validated而使用groups。如果我理解正确,将会设置一些值,其他值则不会。因此,问题仅适用于空检查。您想暂时允许空值。

(1)创建一个用作

的界面
public interface NullAllowed {}

(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;

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

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

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

检查出来: