/** * Copyright 2010-2016 Ralph Schaer <ralphschaer@gmail.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package ch.ralscha.extdirectspring.util; import java.io.InputStream; import org.apache.commons.logging.LogFactory; import org.springframework.util.Assert; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper; /** * Object contains an {@link ObjectMapper} and provides convenient methods. */ public class JsonHandler { private ObjectMapper mapper; public JsonHandler() { this.mapper = new ObjectMapper(); } public JsonHandler(ObjectMapper mapper) { this.mapper = mapper; } /** * Sets a new instance of {@link ObjectMapper}. * * @param mapper a new object mapper. must not be <code>null</code> */ public void setMapper(ObjectMapper mapper) { Assert.notNull(mapper, "ObjectMapper must not be null"); this.mapper = mapper; } /** * @return the currently assigned {@link ObjectMapper} */ public ObjectMapper getMapper() { return this.mapper; } /** * Converts an object into a JSON string. In case of an exception returns null and * logs the exception. * * @param obj the source object * @return obj JSON string, <code>null</code> if an exception occurred */ public String writeValueAsString(Object obj) { return writeValueAsString(obj, false); } /** * Converts an object into a JSON string. In case of an exceptions returns null and * logs the exception. * * @param obj the source object * @param indent if true JSON is written in a human readable format, if false JSON is * written on one line * @return obj JSON string, <code>null</code> if an exception occurred */ public String writeValueAsString(Object obj, boolean indent) { try { if (indent) { return this.mapper.writer().withDefaultPrettyPrinter() .writeValueAsString(obj); } return this.mapper.writeValueAsString(obj); } catch (Exception e) { LogFactory.getLog(JsonHandler.class).info("serialize object to json", e); return null; } } /** * Converts a JSON string into an object. In case of an exception returns null and * logs the exception. * * @param <T> type of the object to create * @param json string with the JSON * @param typeReference {@link TypeReference} instance of the desired result type * {@link com.fasterxml.jackson.core.type.TypeReference} * @return the created object, null if there was an exception */ @SuppressWarnings("unchecked") public <T> T readValue(String json, TypeReference<T> typeReference) { try { return (T) this.mapper.readValue(json, typeReference); } catch (Exception e) { LogFactory.getLog(JsonHandler.class).info("deserialize json to object", e); return null; } } /** * Converts a JSON string into an object. In case of an exception returns null and * logs the exception. * * @param <T> type of the object to create * @param json string with the JSON * @param clazz class of object to create * @return the converted object, null if there is an exception */ public <T> T readValue(String json, Class<T> clazz) { try { return this.mapper.readValue(json, clazz); } catch (Exception e) { LogFactory.getLog(JsonHandler.class).info("deserialize json to object", e); return null; } } /** * Converts a JSON string into an object. The input is read from an InputStream. In * case of an exception returns null and logs the exception. * * @param is a InputStream * @param clazz class of object to create * @return the converted object, null if there is an exception */ public Object readValue(InputStream is, Class<Object> clazz) { try { return this.mapper.readValue(is, clazz); } catch (Exception e) { LogFactory.getLog(JsonHandler.class).info("deserialize json to object", e); return null; } } /** * Converts one object into another. * * @param object the source * @param clazz the type of the target * @return the converted object */ public <T> T convertValue(Object object, Class<T> clazz) { return this.mapper.convertValue(object, clazz); } /** * Converts one object into another. * * @param object the source * @param toValueTypeRef the type of the target * @return the converted object */ public <T> T convertValue(Object object, JavaType toValueTypeRef) { return this.mapper.convertValue(object, toValueTypeRef); } }