Spring RequestBody optional validation

java, spring, spring-mvc

Solution

You could use spring's `@Validated` instead and use `groups`. If I understand correctly, some values will be set, other won't. So, the problem is only with Null checks. You'd want to temporarly allow null values.

(1) Create an interface to be used as a group

public interface NullAllowed {}

(2) Assign the checks to the `NullAllowed` group

@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) Use @Validated and specify the group to validate

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

Only the checks marked with NullAllowed.class will be validated.

Check this out:

JSR303 documentation on groups: http://beanvalidation.org/1.0/spec/#validationapi-validatorapi-groups

Difference between @Valid and @Validated in Spring

Problem

I have a REST API controller like following code. If I use `@valid` annotation, every field of Client's entity are controlled for validation. ``` @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); .... } ``` Client's entity consists of about 5 fields (id, name, address, email, phone). When I update this records, I don't send all of 5 fields in RequestBody. I just want to validate coming from RequestBody.

Original source

Related problems