The following example works for a POST
request, but not for GET
. My goal is to let spring automatically parse LocalDate
from String
input (both request body and also query parameter):
@PostMapping("/datetime")
public Mono<String> datetimePost(@RequestBody DateTimeDto dto) {
return Mono.just("OK");
}
static class DateTimeDto {
private LocalDate date;
//getter, setter
}
Works: POST localhost:8080/datetime
{
"date": "2022-02-02"
}
But the same does not wor with GET:
GET localhost:8080/datetime?date=2022-02-02
@GetMapping("/datetime")
public Mono<String> datetimeGet(DateTimeDto dto) {
return Mono.just("OK);
}
Result:
{
"timestamp": "2022-03-03T08:57:56.248+00:00",
"status": 400,
"message": "'date': : Parse attempt failed for value [2022-02-02]. rejectedValue: 2022-02-02"
}
org.springframework.web.bind.support.WebExchangeBindException: Validation failed for argument at index 0 in method: public reactor.core.publisher.Mono<java.lang.Object> org.example.spring.webflux.ExampleServlet.datetimeGet(org.example.spring.webflux.ExampleServlet$DateTimeDto), with 1 error(s): [Field error in object 'dateTimeDto' on field 'date': rejected value [2022-02-02]; codes [typeMismatch.dateTimeDto.date,typeMismatch.date,typeMismatch.java.time.LocalDate,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [dateTimeDto.date,date]; arguments []; default message [date]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDate' for property 'date'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.time.LocalDate] for value '2022-02-02'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2022-02-02]]] at org.springframework.web.reactive.result.method.annotation.ModelAttributeMethodArgumentResolver.lambda$null$3(ModelAttributeMethodArgumentResolver.java:139) ~[spring-webflux-5.3.16.jar:5.3.16]