Reputation: 11
public class DependentDto { private UUID id; @JsonIgnoreProperties(value = {"dateOfBirth", "age", "maritalStatus", "bloodGroup", "religion", "aadharNumber", "panCardNumber", "uanNumber", "passportNumber", "permanentAddress", "communicationAddress", "guardianName","nextOfKin","nextOfKinContactNumber","skillSet","employeeDto"}) private PersonalInformationDto personalInformationDto; @NotNull(message = "Name can not be null") private String name; @NotNull(message = "Relation can not be null") private String relation; @NotNull(message = "Date Of Birth Date cannot be null") @Pattern(regexp = "^\d{4}-\d{2}-\d{2}$", message = "Invalid date format. Please use the format yyyy-MM-dd (e.g., 2007-12-03).") private String dateOfBirth; @Pattern(regexp = "^\+(?:[0-9] ?){6,14}[0-9]$", message = "Invalid phone number format") private String contactNumber; }
{ "timestamp": "2024-01-23T10:32:04.470+00:00", "path": "/dependents", "status": 400, "error": "Bad Request", "message": "Validation failed for argument at index 0 in method: public reactor.core.publisher.Mono<com.frestonanalytics.msl.staffalyze.dto.DependentDto> com.frestonanalytics.msl.staffalyze.controller.DependentController.createDependent(com.frestonanalytics.msl.staffalyze.dto.DependentDto,org.springframework.web.server.ServerWebExchange), with 1 error(s): [Field error in object 'dependentDto' on field 'dateOfBirth': rejected value [1990-07-]; codes [Pattern.dependentDto.dateOfBirth,Pattern.dateOfBirth,Pattern.java.lang.String,Pattern]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [dependentDto.dateOfBirth,dateOfBirth]; arguments []; default message [dateOfBirth],[Ljavax.validation.constraints.Pattern$Flag;@b9d7349a,^\d{4}-\d{2}-\d{2}$]; default message [Your custom error message for dateOfBirth pattern mismatch]] ", "requestId": "53206fd4-2", "errors": [ { "codes": [ "Pattern.dependentDto.dateOfBirth", "Pattern.dateOfBirth", "Pattern.java.lang.String", "Pattern" ], "arguments": [ { "codes": [ "dependentDto.dateOfBirth", "dateOfBirth" ], "arguments": null, "defaultMessage": "dateOfBirth", "code": "dateOfBirth" }, [], { "codes": [ "^\d{4}-\d{2}-\d{2}$" ], "arguments": null, "defaultMessage": "^\d{4}-\d{2}-\d{2}$" } ], "defaultMessage": "Your custom error message for dateOfBirth pattern mismatch", "objectName": "dependentDto", "field": "dateOfBirth", "rejectedValue": "1990-07-", "bindingFailure": false, "code": "Pattern" } ] }
Tried ValidationMessages.properties but dint work
Upvotes: 0
Views: 28
Reputation: 11
I found the required customisation
In Global Exception Handler class, I added a handler shown below
@ExceptionHandler(WebExchangeBindException.class) public Mono<ResponseEntity<Map<String, Object>>> handleValidationException(WebExchangeBindException ex, ServerWebExchange exchange) { Map<String, Object> errorResponse = new LinkedHashMap<>(); errorResponse.put("timestamp", Instant.now()); errorResponse.put("path", exchange.getRequest().getPath().value()); errorResponse.put("status", ex.getRawStatusCode()); errorResponse.put("error", ex.getStatus().getReasonPhrase()); errorResponse.put("message", ex.getFieldError().getDefaultMessage()); errorResponse.put("requestId", exchange.getRequest().getId()); return Mono.just(ResponseEntity.badRequest().body(errorResponse)); }
Upvotes: 0