I'm using http://immutables.github.io in my SpringBoot project. I added Javax validation annotations in order to validate class but it did not work. I tried to do this way:
@Value.Immutable
@JsonDeserialize(builder = UserSignUpRequest.Builder.class)
@JsonSerialize(as = UserSignUpRequest.class)
@JsonIgnoreProperties(ignoreUnknown = true)
@ImmutableJsonModel
interface AbstractUserSignUpRequest {
Validator VALIDATOR = Validation.buildDefaultValidatorFactory().getValidator();
@Value.Parameter
@Pattern(regexp = RegexPatterns.PHONE_REGEX)
String phone();
@Value.Parameter
@NotBlank
String username();
@Value.Parameter
Optional<DeviceRegistrationRequest> device();
@Value.Check
default void check() {
Set<ConstraintViolation<AbstractUserSignUpRequest>> violations = VALIDATOR.validate(this);
if (!violations.isEmpty()) {
throw new ConstraintViolationException(violations);
}
}
}
In controller body like this:
@PostMapping(
value = "/sign-up",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public Mono<ResponseEntity<UserCreatedResponse>> signUp(
@RequestBody Mono<@Valid UserSignUpRequest> request) {
return request
.flatMap(authenticationService::signUp)
.map(user -> ResponseEntity.status(CREATED).body(user));
}
My code did not work, I could not validate class with this way. How should be implemented javax validation annotations in immutables classes?