7

In my controller I have a method for creating an entity

import javax.validation.Valid;
...
@RestController
public class Controller {

  @RequestMapping(method = RequestMethod.POST)  
  public ResponseEntity<?> create(@Valid @RequestBody RequestDTO requestDTO) {
  ...

with

import org.hibernate.validator.constraints.NotEmpty;
...
public class RequestDTO
    @NotEmpty // (1)
    private String field1;
    //other fields, getters and setters.

I want to add a controller method

update(@Valid @RequestBody RequestDTO requestDTO)

but in this method it should be allowed for field1 to be empty or null, i.e. the line

@NotEmpty // (1)

of the RequestDTO should be ignored.

How can I do this? Do I have to write a class that looks exactly the same like RequestDTO, but does not have the annotation? Or is it somehow possible via inheritance?

Ali Dehghani
  • 39,344
  • 13
  • 147
  • 138
Johannes Flügel
  • 2,442
  • 3
  • 13
  • 29

1 Answers1

11

Short answer: Use Validation Groups:

@NotEmpty(groups = SomeCriteria.class)
private String field1;

And reference your intended group in method handler parameters:

public ResponseEntity<?> create(@Validated(SomeCriteria.class) @RequestBody RequestDTO requestDTO)

In the above example, validations in the SomeCriteria group will be applied and others going to be ignored. Usually, these validation groups are defined as empty interfaces:

public interface SomeCriteria {}

You can read more about these group constraints in Hibernate Validator documentation.

Ali Dehghani
  • 39,344
  • 13
  • 147
  • 138