Bladeren bron

Polish Abstract Deserializer

Josh Cummings 11 maanden geleden
bovenliggende
commit
c53ee19a83

+ 24 - 33
core/src/main/java/org/springframework/security/jackson2/AbstractUnmodifiableCollectionDeserializer.java

@@ -16,6 +16,12 @@
 
 package org.springframework.security.jackson2;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.databind.DeserializationContext;
 import com.fasterxml.jackson.databind.JsonDeserializer;
@@ -23,18 +29,14 @@ import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 
-import java.io.IOException;
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
 /**
- * Abstract base class for deserializers that create unmodifiable collections from JSON data.
- * Subclasses like {@link UnmodifiableListDeserializer} and
- * {@link UnmodifiableSetDeserializer} should implement the method to define the
- * specific collection type and handle the deserialization logic.
+ * Abstract base class for deserializers that create unmodifiable collections from JSON
+ * data. Subclasses like {@link UnmodifiableListDeserializer} and
+ * {@link UnmodifiableSetDeserializer} should implement the method to define the specific
+ * collection type and handle the deserialization logic.
  *
- * @param <T> the type of the unmodifiable collection, such as {@link List} or {@link Set}.
+ * @param <T> the type of the unmodifiable collection, such as {@link List} or
+ * {@link Set}.
  * @author Hyunmin Choi
  */
 abstract class AbstractUnmodifiableCollectionDeserializer<T> extends JsonDeserializer<T> {
@@ -43,35 +45,24 @@ abstract class AbstractUnmodifiableCollectionDeserializer<T> extends JsonDeseria
 	public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
 		ObjectMapper mapper = (ObjectMapper) jp.getCodec();
 		JsonNode node = mapper.readTree(jp);
-		return createUnmodifiableCollection(node, mapper);
+		Collection<Object> values = new ArrayList<>();
+		if (node instanceof ArrayNode arrayNode) {
+			for (JsonNode elementNode : arrayNode) {
+				values.add(mapper.readValue(elementNode.traverse(mapper), Object.class));
+			}
+		}
+		else if (node != null) {
+			values.add(mapper.readValue(node.traverse(mapper), Object.class));
+		}
+		return createUnmodifiableCollection(values);
 	}
 
 	/**
 	 * Creates an unmodifiable collection from the given JSON node.
-	 *
-	 * @param node the JSON node containing the data to be deserialized.
-	 * @param mapper the {@link ObjectMapper} used to deserialize JSON data.
+	 * @param values the values to add to the unmodifiable collection
 	 * @return an unmodifiable collection with the deserialized elements.
 	 * @throws IOException if an error occurs during deserialization.
 	 */
-	protected abstract T createUnmodifiableCollection(JsonNode node, ObjectMapper mapper) throws IOException;
-
-	/**
-	 * Adds elements from the JSON node to the provided collection.
-	 *
-	 * @param node the JSON node containing the elements to add.
-	 * @param mapper the {@link ObjectMapper} used for deserialization.
-	 * @param collection the collection to which elements are added.
-	 * @throws IOException if an error occurs during deserialization.
-	 */
-	protected void addElements(JsonNode node, ObjectMapper mapper, Collection<Object> collection) throws IOException {
-		if (node instanceof ArrayNode arrayNode) {
-			for (JsonNode elementNode : arrayNode) {
-				collection.add(mapper.readValue(elementNode.traverse(mapper), Object.class));
-			}
-		} else if (node != null) {
-			collection.add(mapper.readValue(node.traverse(mapper), Object.class));
-		}
-	}
+	abstract T createUnmodifiableCollection(Collection<Object> values) throws IOException;
 
 }

+ 3 - 8
core/src/main/java/org/springframework/security/jackson2/UnmodifiableListDeserializer.java

@@ -16,11 +16,8 @@
 
 package org.springframework.security.jackson2;
 
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
@@ -35,10 +32,8 @@ import java.util.List;
 class UnmodifiableListDeserializer extends AbstractUnmodifiableCollectionDeserializer<List> {
 
 	@Override
-	protected List createUnmodifiableCollection(JsonNode node, ObjectMapper mapper) throws IOException {
-		List<Object> result = new ArrayList<>();
-		addElements(node, mapper, result);
-		return Collections.unmodifiableList(result);
+	List createUnmodifiableCollection(Collection<Object> values) {
+		return Collections.unmodifiableList(new ArrayList<>(values));
 	}
 
 }

+ 3 - 8
core/src/main/java/org/springframework/security/jackson2/UnmodifiableSetDeserializer.java

@@ -16,10 +16,7 @@
 
 package org.springframework.security.jackson2;
 
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import java.io.IOException;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
@@ -35,10 +32,8 @@ import java.util.Set;
 class UnmodifiableSetDeserializer extends AbstractUnmodifiableCollectionDeserializer<Set> {
 
 	@Override
-	protected Set createUnmodifiableCollection(JsonNode node, ObjectMapper mapper) throws IOException {
-		Set<Object> resultSet = new HashSet<>();
-		addElements(node, mapper, resultSet);
-		return Collections.unmodifiableSet(resultSet);
+	Set createUnmodifiableCollection(Collection<Object> values) {
+		return Collections.unmodifiableSet(new HashSet<>(values));
 	}
 
 }