0

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?

  • 1
    Is your query not resolved here https://github.com/immutables/immutables/issues/26 ? – Abhinaba Chakraborty Jul 04 '20 at 07:16
  • Unfortunately no. 1) I don't use Hibernate and renaming fields also did not help. 2) Cannot use Immutble's '@Value.Check' annotation. I need i18n support for exceptions. Using Immutables '@Value.Check' I cannot get access to Message source. – Nasibulloh Yandashev Jul 04 '20 at 08:49

0 Answers0