forked from graphql-java-kickstart/graphql-java-servlet
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathObjectMapDeserializeHelper.java
30 lines (27 loc) · 1.05 KB
/
ObjectMapDeserializeHelper.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package graphql.kickstart.execution;
import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.core.type.TypeReference;
import java.io.IOException;
import java.util.Map;
public class ObjectMapDeserializeHelper {
public static Map<String, Object> deserializeObjectMapObject(
Object object, ObjectCodec codec, String fieldName) {
if (object instanceof Map) {
@SuppressWarnings("unchecked")
Map<String, Object> genericObjectMap = (Map<String, Object>) object;
return genericObjectMap;
} else if (object instanceof String) {
try {
return codec.readValue(
codec.getFactory().createParser((String) object),
new TypeReference<Map<String, Object>>() {});
} catch (IOException e) {
throw new ObjectMapDeserializationException(
String.format("Cannot deserialize field '%s'", fieldName), e);
}
} else {
throw new ObjectMapDeserializationException(
String.format("Field '%s' should be either an object or a string", fieldName));
}
}
}