8
8
import java .util .Map ;
9
9
10
10
/**
11
- * Helper method to merge the request body (a Map<String, Object>) to an Object to be updated via a Patch HTTP request.
11
+ * Helper class merge the request body (a Map<String, Object>) to an Object to be updated via a Patch HTTP request.
12
12
* <p>
13
13
* Uses ReflectionUtils from Spring Framework to set values to the Object.
14
- *
15
- * @param <T>
16
14
*/
17
- public class ObjectMerger < T > {
15
+ public class ObjectMerger {
18
16
19
17
/**
20
18
* Determines if a Map cache will be used for ObjectMergers.
21
19
*/
22
20
private static boolean cacheEnabled = true ;
23
21
private static Map <Object , ObjectMerger > objectMergerCache = new HashMap <>();
24
22
25
- private static ObjectMapper objectMapper ;
26
- private Class <T > type ;
27
-
28
-
29
- private ObjectMerger (Class <T > type ) {
30
- objectMapper = new ObjectMapper ();
31
- this .type = type ;
32
- }
33
-
34
- /**
35
- * Returns a new instance of ObjectMerger<T> of the given type as parameter OR
36
- * an existing instance created before.
37
- *
38
- * @param type a class to be merged with a Map of <String, Object>.
39
- * @return
40
- */
41
- public static ObjectMerger of (Class type ) {
42
-
43
- if (!cacheEnabled ) {
44
- // Cache is not enabled. A new instance is always created.
45
- return new ObjectMerger (type );
46
- }
47
-
48
- if (!objectMergerCache .containsKey (type )) {
49
- ObjectMerger objectMerger = new ObjectMerger (type );
50
- objectMergerCache .put (type , objectMerger );
51
- // Cache enabled. Instance created (first request).
52
- return objectMerger ;
53
- }
54
-
55
- // Cache enabled. Returning existing instance.
56
- return objectMergerCache .get (type );
57
- }
58
-
59
23
/**
60
- * Updates an objectToUpdate according to data from a Map<String, Object>.
24
+ * Updates an objectToUpdate of type type according to data from a Map<String, Object>.
61
25
*
62
26
* @param objectMap a Map of <String, Object> with data to update destination object. The string values
63
27
* must match fields on the destination object.
64
28
* @param objectToUpdate the object to update.
29
+ *
30
+ * @param type the type of the objectToUpdate.
65
31
*/
66
- public void mergeRequestBodyToGenericObject (Map <String , Object > objectMap , T objectToUpdate ) {
67
- T newObject = objectMapper .convertValue (objectMap , type );
32
+ public static void mergeRequestBodyToGenericObject (Map <String , Object > objectMap , Object objectToUpdate , Class type ) {
33
+ ObjectMapper objectMapper = new ObjectMapper ();
34
+ Object newObject = objectMapper .convertValue (objectMap , type );
68
35
69
36
objectMap .forEach ((fieldProp , valueProp ) -> {
70
37
Field field = ReflectionUtils .findField (type , fieldProp );
@@ -75,5 +42,4 @@ public void mergeRequestBodyToGenericObject(Map<String, Object> objectMap, T obj
75
42
ReflectionUtils .setField (field , objectToUpdate , newValue );
76
43
});
77
44
}
78
-
79
45
}
0 commit comments