I'm trying to validate this class :
public class RegisterRequest {
@Email(message = "format e-mail non valide") @NotNull(message = "ne doit pas être vide")
private String email;
@NotEmpty(message = "ne doit pas être vide")
@NotBlank(message = "ne doit pas être vide")
@NotNull(message = "ne doit pas être vide")
private String prenom;
@NotEmpty(message = "ne doit pas être vide")
@NotBlank(message = "ne doit pas être vide")
@NotNull(message = "ne doit pas être vide")
private String nom;
@Length(min = 13,max = 13 ,message = "doit contenir exactement 13 chiffres")
@NotNull(message = "ne doit pas être vide")
@Pattern(regexp = "^\\d*$", message = "ne doit contenir que des chiffres")
@Pattern(regexp = "^[12]\\w*$", message = "doit commencer par 1 ou 2")
private String cin;
@NotNull(message = "ne doit pas être vide")
@Pattern(regexp = "^(?!.* .*)[\\d+() ]{9,20}$", message = "ne doit contenir que des chiffres , des parentheses et plus")
@Length(min = 9,max = 20)
private String telephone;
@NotNull(message = "ne doit pas être vide")
@Length(min = 5,max = 20,message = "la taille de caractère doit être entre 5 et 20")
@Pattern(regexp = "^(?=[a-zA-Z\\d._-]*$)(?!.*[_.]{2})[^_.].*[^_.]$",message = "ne doit contenir de caractère special a part _ , .,-")
private String login;
}
after construction with ObjectMapper like this :
@PostMapping("/register")
public ResponseEntity<?> register(
@RequestParam("file") MultipartFile file,
@RequestParam Map<String,Object> req
) throws UserNotFoundException, EntreeException, RoleNotFoundException, IOException {
ObjectMapper mapper = new ObjectMapper();
RegisterRequest registerRequest = mapper.convertValue(req,RegisterRequest.class);
return controllerResponse(registerRequest,"");
}
as you see i can't use the @Valid
annotation here (note : if there is a method to use the annotation directly i'll prefere it. but i didnt find any way to do it.
so i've found that it is better to create a validator class so after some research i've found this method
@Slf4j
public class CustomValidator {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
public Boolean validate(Object object){
Set<ConstraintViolation<Object>> violations = validator.validate(object);
log.info(violations.toString());
String errorMessage =
violations.stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(", "));
throw new MethodArgumentNotValidException(errorMessage);
}
}
but it is not working take two argument in his constructor :
MethodParameter parameter, BindingResult bindingResult
so my question is how create this argument and how to throw it like @Valid
throw it or is there any other way to handle the validation error