Spring RequestBody 可选验证

3

我有一个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个回答

9

您可以使用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的检查项才会被验证。


看看这个:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接