package at.gv.egovernment.moa.id.commons.utils; import java.io.IOException; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.type.TypeFactory; /** * Helper class to handle the JSON (de-)serialization. * */ public class JsonMapper { private ObjectMapper mapper = new ObjectMapper(); /** * The default constructor where the default pretty printer is disabled. */ public JsonMapper() { this(false); } /** * The constructor. * @param prettyPrint enables or disables the default pretty printer */ public JsonMapper(boolean prettyPrint) { mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE); mapper.setVisibility(PropertyAccessor.GETTER, Visibility.PUBLIC_ONLY); mapper.setVisibility(PropertyAccessor.IS_GETTER, Visibility.PUBLIC_ONLY); if (prettyPrint) { mapper.enable(SerializationFeature.INDENT_OUTPUT); } } /** * Serialize an object to a JSON string. * @param value the object to serialize * @return a JSON string * @throws JsonProcessingException thrown when an error occurs during serialization */ public String serialize(Object value) throws JsonProcessingException { return mapper.writeValueAsString(value); } /** * Deserialize a JSON string. * * @param value the JSON string to deserialize * @param clazz optional parameter that determines the type of the returned object. If not set, an {@link Object} is returned. * @return the deserialized JSON string as an object of type {@code clazz} or {@link Object} * @throws JsonParseException if the JSON string contains invalid content. * @throws JsonMappingException if the input JSON structure does not match structure expected for result type * @throws IOException if an I/O problem occurs (e.g. unexpected end-of-input) */ public Object deserialize(String value, Class clazz) throws JsonParseException, JsonMappingException, IOException{ ObjectMapper mapper = new ObjectMapper(); if (clazz != null) { JavaType javaType = TypeFactory.defaultInstance().constructType(clazz); return mapper.readValue(value, javaType); } else { return mapper.readValue(value, Object.class); } } }