From 9a847dc5a0c9839d51ec276b2c9f4cca406f4a09 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 29f8fc7892..0cf1d3f021 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; } } @@ -286,7 +285,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 eb3d3bf9fc..c9df127367 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. @@ -183,7 +183,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; } } @@ -246,7 +246,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(); @@ -373,7 +373,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; } @@ -398,9 +398,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())); } }