Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Rest Controller: how to selectively switch off validation

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?

like image 534
Johannes Flügel Avatar asked Feb 29 '16 16:02

Johannes Flügel


1 Answers

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.

like image 69
Ali Dehghani Avatar answered Nov 06 '22 17:11

Ali Dehghani