使用jackson实现json的序列化以及反序列化

使用jackson实现json的序列化以及反序列化
1.添加maven依赖

		<dependency>
			<groupId>com.fasterxml.jackson.coregroupId>
			<artifactId>jackson-annotationsartifactId>
			<scope>providedscope>
		dependency>

2.BootObjectMapper


import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.StdScalarSerializer;

import java.io.IOException;

/**
 * A custom ObjectMapper for general using
 */
public class BootObjectMapper extends ObjectMapper {

    public BootObjectMapper() {
        this.setSerializationInclusion(JsonInclude.Include.NON_NULL);// 设置序列化时,null字段不序列化
        this.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);// 设置序列化时,遇到空对象时不抛异常
        this.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);// 设置反序列化时,遇到未知属性不抛异常
        this.registerModule(new StringTrimModule());
    }

    /**
     * 序列化/反序列化时,对 String 类型参数,执行 trim() 操作
     */
    public static class StringTrimModule extends SimpleModule {
        public StringTrimModule() {
            addSerializer(String.class, new StdScalarSerializer<String>(String.class) {
                @Override
                public void serialize(String value, JsonGenerator gen, SerializerProvider provider) throws IOException {
                    gen.writeString(value.trim());
                }
            });
            addDeserializer(String.class, new StdScalarDeserializer<String>(String.class) {
                @Override
                public String deserialize(JsonParser jsonParser, DeserializationContext ctx) throws IOException, JsonProcessingException {
                    return jsonParser.getValueAsString().trim();
                }
            });
        }
    }

}

3.jackson工具类


import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;

/**
 * Jackson 常用方法静态化
 */
public final class Jackson {

    private static final ObjectMapper mapper = new BootObjectMapper();

    /**
     * object to json
     * @param object to be wrote as json
     * @return
     */
    public static String asJson(final Object object) {
        try {
            return mapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            throw new JacksonException("Jackson asJson cause Exception", e);
        }
    }

    /**
     * json to object
     * @param json to be read as object
     * @param clz target object Class
     * @param 
     * @return
     */
    public static <T> T asObject(final String json, Class<T> clz) {
        try {
            return mapper.readValue(json, clz);
        } catch (IOException e) {
            throw new JacksonException("Jackson asObject cause Exception", e);
        }
    }

    /**
     * json to object
     * @param json to be read as object
     * @param valueTypeRef target object TypeReference
     * @param 
     * @return
     */
    public static <T> T asObject(final String json, TypeReference<T> valueTypeRef) {
        try {
            return mapper.readValue(json, valueTypeRef);
        } catch (IOException e) {
            throw new JacksonException("Jackson asObject cause Exception", e);
        }
    }

    /**
     * JacksonException
     */
    public static final class JacksonException extends RuntimeException {
        public JacksonException(String message, Throwable cause) {
            super(message, cause);
        }
    }

}

你可能感兴趣的:(json,java)