From 405fdd3a57c986883f96c8afb7fda0869c209de3 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Mon, 22 Jun 2020 09:48:41 +0200 Subject: [PATCH] Map from charset name rather than Charset With this commit it is no longer assumed that all charset names in the JsonEncoding can be resolved by Charset.forName. Instead, we store the charset name itself, rather than the Charset object. --- .../http/codec/json/AbstractJackson2Encoder.java | 9 ++++----- .../json/AbstractJackson2HttpMessageConverter.java | 12 ++++++------ 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java b/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java index c043cc60609..0437c5cbb33 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java @@ -69,7 +69,7 @@ public abstract class AbstractJackson2Encoder extends Jackson2CodecSupport imple private static final Map STREAM_SEPARATORS; - private static final Map ENCODINGS; + private static final Map ENCODINGS; static { STREAM_SEPARATORS = new HashMap<>(4); @@ -78,8 +78,7 @@ public abstract class AbstractJackson2Encoder extends Jackson2CodecSupport imple ENCODINGS = new HashMap<>(JsonEncoding.values().length); for (JsonEncoding encoding : JsonEncoding.values()) { - Charset charset = Charset.forName(encoding.getJavaName()); - ENCODINGS.put(charset, encoding); + ENCODINGS.put(encoding.getJavaName(), encoding); } } @@ -116,7 +115,7 @@ public abstract class AbstractJackson2Encoder extends Jackson2CodecSupport imple } if (mimeType != null && mimeType.getCharset() != null) { Charset charset = mimeType.getCharset(); - if (!ENCODINGS.containsKey(charset)) { + if (!ENCODINGS.containsKey(charset.name())) { return false; } } @@ -287,7 +286,7 @@ public abstract class AbstractJackson2Encoder extends Jackson2CodecSupport imple protected JsonEncoding getJsonEncoding(@Nullable MimeType mimeType) { if (mimeType != null && mimeType.getCharset() != null) { Charset charset = mimeType.getCharset(); - JsonEncoding result = ENCODINGS.get(charset); + JsonEncoding result = ENCODINGS.get(charset.name()); if (result != null) { return result; } diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java index 01de325ff1d..d52b376ae8f 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java @@ -76,7 +76,7 @@ import org.springframework.util.TypeUtils; */ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGenericHttpMessageConverter { - private static final Map ENCODINGS = jsonEncodings(); + private static final Map ENCODINGS = jsonEncodings(); /** * The default charset used by the converter. @@ -184,7 +184,7 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener } if (mediaType != null && mediaType.getCharset() != null) { Charset charset = mediaType.getCharset(); - if (!ENCODINGS.containsKey(charset)) { + if (!ENCODINGS.containsKey(charset.name())) { return false; } } @@ -247,7 +247,7 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener MediaType contentType = inputMessage.getHeaders().getContentType(); Charset charset = getCharset(contentType); - boolean isUnicode = ENCODINGS.containsKey(charset); + boolean isUnicode = ENCODINGS.containsKey(charset.name()); try { if (inputMessage instanceof MappingJacksonInputMessage) { Class deserializationView = ((MappingJacksonInputMessage) inputMessage).getDeserializationView(); @@ -374,7 +374,7 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener protected JsonEncoding getJsonEncoding(@Nullable MediaType contentType) { if (contentType != null && contentType.getCharset() != null) { Charset charset = contentType.getCharset(); - JsonEncoding encoding = ENCODINGS.get(charset); + JsonEncoding encoding = ENCODINGS.get(charset.name()); if (encoding != null) { return encoding; } @@ -399,9 +399,9 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener return super.getContentLength(object, contentType); } - private static Map jsonEncodings() { + private static Map jsonEncodings() { return EnumSet.allOf(JsonEncoding.class).stream() - .collect(Collectors.toMap(encoding -> Charset.forName(encoding.getJavaName()), Function.identity())); + .collect(Collectors.toMap(JsonEncoding::getJavaName, Function.identity())); } }