From 25f37da466989971bee69ccde69d0646186a020d Mon Sep 17 00:00:00 2001 From: Johnny Lim Date: Mon, 20 Jun 2016 11:54:26 +0900 Subject: [PATCH] Reuse objects in JsonParser implementations Closes gh-6188 --- .../boot/json/GsonJsonParser.java | 15 +++++++-------- .../boot/json/JacksonJsonParser.java | 17 +++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/spring-boot/src/main/java/org/springframework/boot/json/GsonJsonParser.java b/spring-boot/src/main/java/org/springframework/boot/json/GsonJsonParser.java index 148fd146dcd..3fd6ab396b6 100644 --- a/spring-boot/src/main/java/org/springframework/boot/json/GsonJsonParser.java +++ b/spring-boot/src/main/java/org/springframework/boot/json/GsonJsonParser.java @@ -33,6 +33,11 @@ import com.google.gson.reflect.TypeToken; */ public class GsonJsonParser implements JsonParser { + private static final TypeToken> LIST_TYPE = new TypeToken>() { + }; + private static final TypeToken> MAP_TYPE = new TypeToken>() { + }; + private Gson gson = new GsonBuilder().create(); @Override @@ -40,7 +45,7 @@ public class GsonJsonParser implements JsonParser { if (json != null) { json = json.trim(); if (json.startsWith("{")) { - return this.gson.fromJson(json, new MapTypeToken().getType()); + return this.gson.fromJson(json, MAP_TYPE.getType()); } } throw new IllegalArgumentException("Cannot parse JSON"); @@ -51,16 +56,10 @@ public class GsonJsonParser implements JsonParser { if (json != null) { json = json.trim(); if (json.startsWith("[")) { - TypeToken> type = new TypeToken>() { - }; - return this.gson.fromJson(json, type.getType()); + return this.gson.fromJson(json, LIST_TYPE.getType()); } } throw new IllegalArgumentException("Cannot parse JSON"); } - private static final class MapTypeToken extends TypeToken> { - - } - } diff --git a/spring-boot/src/main/java/org/springframework/boot/json/JacksonJsonParser.java b/spring-boot/src/main/java/org/springframework/boot/json/JacksonJsonParser.java index 97d5e4ed972..298d5d73dbf 100644 --- a/spring-boot/src/main/java/org/springframework/boot/json/JacksonJsonParser.java +++ b/spring-boot/src/main/java/org/springframework/boot/json/JacksonJsonParser.java @@ -30,10 +30,17 @@ import com.fasterxml.jackson.databind.ObjectMapper; */ public class JacksonJsonParser implements JsonParser { + private static final TypeReference> LIST_TYPE = new TypeReference>() { + }; + private static final TypeReference> MAP_TYPE = new TypeReference>() { + }; + + private final ObjectMapper objectMapper = new ObjectMapper(); + @Override public Map parseMap(String json) { try { - return new ObjectMapper().readValue(json, new MapTypeReference()); + return this.objectMapper.readValue(json, MAP_TYPE); } catch (Exception ex) { throw new IllegalArgumentException("Cannot parse JSON", ex); @@ -43,17 +50,11 @@ public class JacksonJsonParser implements JsonParser { @Override public List parseList(String json) { try { - TypeReference> type = new TypeReference>() { - }; - return new ObjectMapper().readValue(json, type); + return this.objectMapper.readValue(json, LIST_TYPE); } catch (Exception ex) { throw new IllegalArgumentException("Cannot parse JSON", ex); } } - private static class MapTypeReference extends TypeReference> { - - }; - }