-
Notifications
You must be signed in to change notification settings - Fork 38.8k
Closed
Labels
in: webIssues in web modules (web, webmvc, webflux, websocket)Issues in web modules (web, webmvc, webflux, websocket)type: enhancementA general enhancementA general enhancement
Milestone
Description
James Howe opened SPR-14201 and commented
For example, I'm trying to receive an HTTP date header:
@RequestHeader(HttpHeaders.IF_MODIFIED_SINCE) Optional<Instant> ifModifiedSince
but this results in a conversion error
org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type [java.lang.String] to required type [java.util.Optional]
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:115)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:99)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:161)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:128)
... 88 more
Caused by: org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.web.bind.annotation.RequestHeader java.time.Instant] for value 'Thu, 21 Apr 2016 17:11:08 +0100'
at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:192)
at org.springframework.core.convert.support.ObjectToOptionalConverter.convert(ObjectToOptionalConverter.java:75)
at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:35)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:192)
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:173)
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:108)
at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:64)
at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:47)
at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:688)
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:107)
... 91 more
Caused by: java.time.format.DateTimeParseException: Text 'Thu, 21 Apr 2016 17:11:08 +0100' could not be parsed at index 0
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.Instant.parse(Instant.java:395)
at org.springframework.format.datetime.standard.InstantFormatter.parse(InstantFormatter.java:40)
at org.springframework.format.datetime.standard.InstantFormatter.parse(InstantFormatter.java:35)
at org.springframework.format.support.FormattingConversionService$ParserConverter.convert(FormattingConversionService.java:194)
at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:35)
... 101 more
I tried to add @DateTimeFormat but it is unwieldy - the only built-ins are ISO-8601 formats. It's not possible to specify Java 8's DataTimeFormatter.RFC_1123_DATE_TIME to this annotation.
Given that all HTTP date/time headers should be using the RFC 1123 format, shouldn't that be the default for @RequestHeader conversion? There should at least be better formatter integration with java.time classes.
I'm running in a Spring Boot 1.3.3 context, if that makes any difference.
Affects: 4.2.5
Issue Links:
- @DateTimeFormat's JSR-310 formatter is not strict in case of pattern [SPR-13567] #18143
@DateTimeFormat's JSR-310 formatter is not strict in case of pattern - Support locale parameter to DateTimeFormat annotation [SPR-14350] #18922 Support locale parameter to DateTimeFormat annotation
Referenced from: commits 9412f7a
Metadata
Metadata
Assignees
Labels
in: webIssues in web modules (web, webmvc, webflux, websocket)Issues in web modules (web, webmvc, webflux, websocket)type: enhancementA general enhancementA general enhancement