1 package com.vladmihalcea.hibernate.type.util;
2
3 import com.fasterxml.jackson.core.JsonProcessingException;
4 import com.fasterxml.jackson.databind.JsonNode;
5 import com.fasterxml.jackson.databind.ObjectMapper;
6
7 import java.io.IOException;
8 import java.lang.reflect.Type;
9
10
16 public class ObjectMapperWrapper {
17
18 public static final ObjectMapperWrapper INSTANCE = new ObjectMapperWrapper();
19
20 private final ObjectMapper objectMapper;
21
22 private JsonSerializer jsonSerializer = new ObjectMapperJsonSerializer(this);
23
24 public ObjectMapperWrapper() {
25 this.objectMapper = new ObjectMapper().findAndRegisterModules();
26 }
27
28 public ObjectMapperWrapper(ObjectMapper objectMapper) {
29 this.objectMapper = objectMapper;
30 }
31
32 public void setJsonSerializer(JsonSerializer jsonSerializer) {
33 this.jsonSerializer = jsonSerializer;
34 }
35
36 public ObjectMapper getObjectMapper() {
37 return objectMapper;
38 }
39
40 public <T> T fromString(String string, Class<T> clazz) {
41 try {
42 return objectMapper.readValue(string, clazz);
43 } catch (IOException e) {
44 throw new IllegalArgumentException("The given string value: " + string + " cannot be transformed to Json object", e);
45 }
46 }
47
48 public <T> T fromString(String string, Type type) {
49 try {
50 return objectMapper.readValue(string, objectMapper.getTypeFactory().constructType(type));
51 } catch (IOException e) {
52 throw new IllegalArgumentException("The given string value: " + string + " cannot be transformed to Json object", e);
53 }
54 }
55
56 public String toString(Object value) {
57 try {
58 return objectMapper.writeValueAsString(value);
59 } catch (JsonProcessingException e) {
60 throw new IllegalArgumentException("The given Json object value: " + value + " cannot be transformed to a String", e);
61 }
62 }
63
64 public JsonNode toJsonNode(String value) {
65 try {
66 return objectMapper.readTree(value);
67 } catch (IOException e) {
68 throw new IllegalArgumentException(e);
69 }
70 }
71
72 public <T> T clone(T value) {
73 return jsonSerializer.clone(value);
74 }
75 }
76