save( Long id, @RequestBody @Valid @NotNull QdCFPresenter qdcf ) { return this.qdcf" /> save( Long id, @RequestBody @Valid @NotNull QdCFPresenter qdcf ) { return this.qdcf" /> save( Long id, @RequestBody @Valid @NotNull QdCFPresenter qdcf ) { return this.qdcf"/>

java and hibernate validation: validate two method parameters

207 Views Asked by At

Here my controller:

@PutMapping("{id}")
public Mono<QdCFPresenter> save(
    Long id,
    @RequestBody @Valid @NotNull QdCFPresenter qdcf
) {
    return this.qdcfService.store(qdcf);
}

I need to validate that id and qdcf.id are equals.

The way I need to accomplish that is using javax.validation.

We have all validation rules all encapsulated using javax.validation validations.

For example:

public class QdCFPresenter {

    private Long id;

    @NotNull
    private Long codi;

}

So, is there any way to get it USING javax.validation validations?

1

There are 1 best solutions below

0
Andriy Slobodyanyk On

I need to validate that id and qdcf.id are equals.

I would disagree with this statement.

I would suggest to separate the concepts and have 3 different classes:

  • an incoming request DTO (QdCFPresenter in your case), it shouldn't contain id as it is a part neither of POST nor PUT request
  • a domain model (with id and code)
  • an outgoing response DTO (also with id and code)

Two last ones look similar but have different responsibilities. The response DTO is your contract with consumers, it could maintain its documentation and so on. The domain model is your internal thing and shouldn't be exposed to be able to evolve if required.

And the incoming request DTO is a blueprint for the creation or modification. You shouldn't require it to have id at all.