I have a spring boot application. POST request of Router Function is getting List of Employee objects where date-of-birth in Employee class is expected to be in yyyy-MM-dd format while received json body is having date-of-birth in dd/MM/yyyy format.
As I don't want to change date format at global level, is there any way where I can de-serialize dd/MM/yyyy date-of-birth to yyyy-MM-dd coming via request body.
@JsonFormat(pattern = "yyyy-MM-dd") will not work as it expect date coming in request body should be in yyyy-MM-dd format while in my case date is coming in dd/MM/yyyy format.
EmployeeDto
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(SnakeCaseStrategy.class)
public class EmployeeDto {
private String name;
private String gender;
private LocalDate dateOfBirth;
}
Router Config
@Bean
public RouterFunction<ServerResponse> employeeRoutes(EmployeeHandler employeeHandler) {
return route(POST("/employees").and(accept(APPLICATION_JSON)).and(contentType(APPLICATION_JSON)),
employeeHandler::saveEmployees);
}
EmployeeHandler
public class EmployeeHandler {
private final EmployeeService employeeService;
public Mono<ServerResponse> saveEmployees(ServerRequest serverRequest) {
return ServerResponse.ok()
.body(serverRequest.bodyToMono(new ParameterizedTypeReference<List<EmployeeDto>>() {})
.flatMap(EmployeeService::saveEmployees)
.doOnError(throwable -> log.error("Could not save employees", throwable)),
Map.class);
}
}