在Spring Boot 2中,我如何接受LocalDates作为RequestParams

时间:2018-02-13 19:51:44

标签: java spring spring-boot

我使用的是Spring Boot 2.0.0 RC1。我可以看到这个更改:https://github.com/spring-projects/spring-boot/commit/2fa0539e7f7bf93505f67303955cc7da6f9f5846和类路径上的类WebConversionService。我可以用我选择的日期格式提供它的bean。但是这个:

@RequestMapping(value = ["/test"], method = [RequestMethod.GET])
fun test2(@RequestParam param: LocalDate): LocalDate {
    return param
}

当我用" 2018-01-01"来呼叫它时仍然无法正常工作。我知道我可以使用@DateTimeFormat,但是我试图避免这种情况并设置全局格式(或者理想情况下根本不设置它并使其正常工作,就像解析JSON主体一样)

1 个答案:

答案 0 :(得分:1)

为使此新功能正常工作,您需要在validation_sw中设置company_id属性。

请注意,使用通用ISO格式company_id似乎存在问题:当我尝试使用该格式时,遇到了以下异常:

Table-2

通过调试,我发现根本原因是此异常:

spring.mvc.date-format

我还发现,用于解析的application.properties类似于yyyy-MM-dd表示:

Failed to convert value of type 'java.lang.String' to required type 'java.time.LocalDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.web.bind.annotation.RequestParam java.time.LocalDate] for value '2018-04-20'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2018-04-20]

假定无法获得Text '2018-04-20' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {DayOfMonth=20, YearOfEra=2018, MonthOfYear=4},ISO of type java.time.format.Parsed的原因是,构造的DateTimeFormatter缺少toString()字段的值,但是Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)字段已填写。

因此,我尝试使用LocalDate来代替(有关TemporalAccessorEra的区别,请参见here):

YearOfEra

更新

在GitHub上打开了一个新的issue