The title is a bit of a hand-full, but it's basically that #24489 only implemented partial support for non-UTF-8 charsets in 4882eb2.
The added processInput(..) is only called form Flux<Object> decode(Publisher<DataBuffer>, ResolvableType, MimeType, Map<String, Object>) but not from Object decode(DataBuffer, ResolvableType, MimeType, Map<String, Object>) (the latter is also used by the implementation of Mono<Object> decodeToMono(..))
The issue can be verified by using
_webClient.method(method).uri(link)...retrieve().toEntityList(typeRef) -> works for "ISO-8859-1" charset
_webClient.method(method).uri(link)...retrieve().toEntity(typeRef) -> fails for "ISO-8859-1" charset
Here's the stack trace:
org.springframework.core.codec.DecodingException: JSON decoding error: Invalid UTF-8 middle byte 0x6d
at org.springframework.http.codec.json.AbstractJackson2Decoder.processException(AbstractJackson2Decoder.java:282)
Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below:
Error has been observed at the following site(s):
*__checkpoint ⇢ Body from UNKNOWN [DefaultClientResponse]
Original Stack Trace:
at org.springframework.http.codec.json.AbstractJackson2Decoder.processException(AbstractJackson2Decoder.java:282)
at org.springframework.http.codec.json.AbstractJackson2Decoder.decode(AbstractJackson2Decoder.java:218)
at org.springframework.http.codec.json.AbstractJackson2Decoder.lambda$decodeToMono$2(AbstractJackson2Decoder.java:198)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:132)
...
Caused by: com.fasterxml.jackson.core.JsonParseException: Invalid UTF-8 middle byte 0x6d
at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 2, column: 21]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2596)
at com.fasterxml.jackson.core.JsonParser._constructReadException(JsonParser.java:2622)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:820)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidOther(UTF8StreamJsonParser.java:3679)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidOther(UTF8StreamJsonParser.java:3686)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._decodeUtf8_4(UTF8StreamJsonParser.java:3512)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishString2(UTF8StreamJsonParser.java:2580)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishString(UTF8StreamJsonParser.java:2489)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.getTextCharacters(UTF8StreamJsonParser.java:446)
at com.fasterxml.jackson.databind.util.TokenBuffer._copyBufferValue(TokenBuffer.java:1277)
at com.fasterxml.jackson.databind.util.TokenBuffer.copyCurrentStructure(TokenBuffer.java:1215)
at com.fasterxml.jackson.databind.DeserializationContext.bufferAsCopyOfValue(DeserializationContext.java:592)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeWithUnwrapped(BeanDeserializer.java:782)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:335)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342)
at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2130)
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1500)
at org.springframework.http.codec.json.AbstractJackson2Decoder.decode(AbstractJackson2Decoder.java:213)
at org.springframework.http.codec.json.AbstractJackson2Decoder.lambda$decodeToMono$2(AbstractJackson2Decoder.java:198)
....
The title is a bit of a hand-full, but it's basically that #24489 only implemented partial support for non-UTF-8 charsets in 4882eb2.
The added
processInput(..)is only called formFlux<Object> decode(Publisher<DataBuffer>, ResolvableType, MimeType, Map<String, Object>)but not fromObject decode(DataBuffer, ResolvableType, MimeType, Map<String, Object>)(the latter is also used by the implementation ofMono<Object> decodeToMono(..))The issue can be verified by using
_webClient.method(method).uri(link)...retrieve().toEntityList(typeRef)-> works for"ISO-8859-1"charset_webClient.method(method).uri(link)...retrieve().toEntity(typeRef)-> fails for"ISO-8859-1"charsetHere's the stack trace: