json处理(jackson)

  1. ObjectMapper
  • 配置方法(链式调用)
方法 描述
registerModule(Module module) 注册模块
registerModules(Module… modules) 注册多个模块
findAndRegisterModules() 查找并注册模块
setSerializerFactory(SerializerFactory f) 设置序列化工厂
setSerializerProvider(DefaultSerializerProvider p) 设置序列化提供者
setMixIns(Map, Class> mixins) 设置混合类型
addMixIn(Class target, Class mixinSource) 添加混合类型
setMixInResolver(MixInResolver resolver) 设置混合解析器
setVisibility(VisibilityChecker vc) 设置可见性
setSubtypeResolver(SubtypeResolver str) 设置子类型解析器
setAnnotationIntrospector(AnnotationIntrospector ai) 设置公共注释内省者
setAnnotationIntrospectors(AnnotationIntrospector s,
AnnotationIntrospector d)
设置序列化与反序列化注释内省者
setPropertyNamingStrategy(PropertyNamingStrategy s) 设置属性命名策略
setDefaultPrettyPrinter(PrettyPrinter pp) 设置输出格式
setSerializationInclusion(Include incl) 设置序列化包含字段
setDefaultPropertyInclusion(Value incl) 设置默认字段包含字段
setDefaultSetterInfo(Value v) 设置默认设置信息
setDefaultVisibility(Value vis) 设置默认可见性
setDefaultMergeable(Boolean b) 设置默认可合并
enableDefaultTyping(ObjectMapper.DefaultTyping a,
As includeAs)
启用默认类型
enableDefaultTypingAsProperty(ObjectMapper.DefaultTyping a,
String propertyName)
启用字段默认类型
disableDefaultTyping() 禁用默认类型
setDefaultTyping(TypeResolverBuilder typer) 设置默认类型
setTypeFactory(TypeFactory f) 设置类型工厂
setNodeFactory(JsonNodeFactory f) 设置节点工厂
addHandler(DeserializationProblemHandler h) 添加处理器
clearProblemHandlers() 清除处理器
setConfig(DeserializationConfig config) 设置配置
setFilterProvider(FilterProvider filterProvider) 设置过滤提供者
setBase64Variant(Base64Variant v) 设置Base64变体
setDateFormat(DateFormat dateFormat) 设置日期格式
setHandlerInstantiator(HandlerInstantiator hi) 设置处理程序实例化器
setInjectableValues(InjectableValues injectableValues) 设置可注射值
setLocale(Locale l) 设置语言环境
setTimeZone(TimeZone tz) 设置时区
configure(MapperFeature f, boolean state) 设置配置
enable(MapperFeature… f) 启用配置
disable(MapperFeature… f) 禁用配置
  • 操作方法
方法 描述
copy() 复制有个对象
version() 获取版本信息
getSerializationConfig() 获取序列化配置
getDeserializationConfig() 获取反序列化配置
getDeserializationContext() 获取反序列化上下文
mixInCount() 获取混合类型数量
getSerializerProviderInstance() 获取序列化提供者实例
getVisibilityChecker() 获取可见性检查器
findMixInClassFor(Class cls) 查找混合类型类
getSubtypeResolver() 获取子类型解析器
registerSubtypes(Class… classes) 注册子类型
configOverride(Class type) 配置覆盖
getTypeFactory() 获取类型工厂
constructType(Type t) 获取构造类型
getNodeFactory() 获取节点工厂
getFactory() 获取工厂
getDateFormat() 获取日期类型
getInjectableValues() 获取可注射值
isEnabled(MapperFeature f) 判断配置是否启用
readValue(String content, Class valueType) 读取json;
可读取以下类型:
json字符串(String),
字符流(Reader),
字节流(InputStream),
json解析器(JsonParser),
字节数组(byte[])
文件(File),
地址(URL),
数据(DataInput)
可设置返回的类型:
Class,
TypeReference,
ResolvedType
readValues(JsonParser p, Class valueType) 读取多值,获得映射迭代器
readTree(String content) 读取树,读取类型同readValue
writeValue(JsonGenerator g, Object value) 写出值,可写入以下参数:
JsonGenerator,File,OutputStream
DataOutput,Writer
writeTree(JsonGenerator jgen, TreeNode root) 写出树
createObjectNode() 创建一个节点对象
createArrayNode() 创建一个节点数组
treeAsTokens(TreeNode n) 树作为令牌
treeToValue(TreeNode n, Class valueType) 树转值
valueToTree(Object fromValue) 值转树
canSerialize(Class type) 判断是否可序列化
canDeserialize(JavaType type) 判断是否可反序列化
writeValueAsString(Object value) 写入值到字符串
writeValueAsBytes(Object value) 写入值到字符数组
writer() 获取写入对象
writerWithView(Class serializationView) 获取带视图写入对象
writerFor(Class rootType) 获取写入对象
writerWithDefaultPrettyPrinter() json字符串格式化
reader() 获取读取对象
readerForUpdating(Object valueToUpdate) 获取用于更新的读取对象
readerFor(JavaType type) 获取读取对象
readerWithView(Class view) 获取带视图读取对象
convertValue(Object fromValue, Class type) 转换值
updateValue(T valueToUpdate, Object overrides) 更新值
acceptJsonFormatVisitor(Class type,
JsonFormatVisitorWrapper visitor)
接受Json格式访问者
  • 静态方法
方法 描述
findModules(ClassLoader classLoader) 获取的模块
  1. 常量

    • SerializationFeature

      通过ObjectMapper对象configure/enable/disable方法设置

      常量 描述
      WRAP_ROOT_VALUE 是否以类名为根节点,默认false
      INDENT_OUTPUT 是否缩放排列输出,默认false
      FAIL_ON_EMPTY_BEANS 空失败
      FAIL_ON_SELF_REFERENCES 自引用失败
      WRAP_EXCEPTIONS 包装异常
      FAIL_ON_UNWRAPPED_TYPE_IDENTIFIERS 未包装的类型标识符失败
      CLOSE_CLOSEABLE 关闭
      FLUSH_AFTER_WRITE_VALUE 写入值后刷新
      WRITE_DATES_AS_TIMESTAMPS 序列化Date日期时以时间戳输出,默认true;为false时以 2020-09-16T01:07:23.275+0000 格式输出
      WRITE_DATE_KEYS_AS_TIMESTAMPS 将日期键写入时间戳
      WRITE_DATES_WITH_ZONE_ID 将区域id写入日期
      WRITE_DURATIONS_AS_TIMESTAMPS 将持续时间写成时间戳
      WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS 序列化char[]时以json数组输出,默认false
      WRITE_ENUMS_USING_TO_STRING 序列化枚举是否以toString()来输出,
      默认false,即默认以name()来输出
      WRITE_ENUMS_USING_INDEX 序列化枚举是否以ordinal()来输出,默认false
      WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED 开启,默认false
      WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS 将日期时间戳记写入毫微秒
      ORDER_MAP_ENTRIES_BY_KEYS 序列化Map时对key进行排序操作,默认false
      EAGER_SERIALIZER_FETCH 急序列化器获取
      USE_EQUALITY_FOR_OBJECT_ID 对对象ID使用平等
    • DeserializationFeature

      通过ObjectMapper对象configure/enable/disable方法设置

      常量 描述
      USE_BIG_DECIMAL_FOR_FLOATS 浮点类型使用BigDecimal,默认false
      USE_BIG_INTEGER_FOR_INTS int类型使用BigInteger,默认false
      USE_LONG_FOR_INTS int类型使用long,默认false
      USE_JAVA_ARRAY_FOR_JSON_ARRAY json序列使用java序列,默认false
      FAIL_ON_UNKNOWN_PROPERTIES 为false忽略未知属性失败,默认为true
      FAIL_ON_NULL_FOR_PRIMITIVES 主键为空失败
      FAIL_ON_NUMBERS_FOR_ENUMS 数字枚举失败
      FAIL_ON_INVALID_SUBTYPE 无效的子类型失败
      FAIL_ON_READING_DUP_TREE_KEY 读取双树树密钥失败
      FAIL_ON_IGNORED_PROPERTIES 被忽略的属性失败
      FAIL_ON_UNRESOLVED_OBJECT_IDS 未能解决的对象ID失败
      FAIL_ON_MISSING_CREATOR_PROPERTIES 缺少创作者属性失败
      FAIL_ON_NULL_CREATOR_PROPERTIES 空创建者属性失败
      FAIL_ON_MISSING_EXTERNAL_TYPE_ID_PROPERTY 缺少外部类型ID属性失败
      FAIL_ON_TRAILING_TOKENS 交易令牌失败
      WRAP_EXCEPTIONS 报错异常
      ACCEPT_SINGLE_VALUE_AS_ARRAY 单值可转换为集合数组,默认false
      UNWRAP_SINGLE_VALUE_ARRAYS 取消单值数组,默认false
      UNWRAP_ROOT_VALUE 解析根节点为类名的json,默认false
      ACCEPT_EMPTY_STRING_AS_NULL_OBJECT 接受空字符串作为空对象,默认false
      ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT 接受空数组作为空对象,默认false
      ACCEPT_FLOAT_AS_INT 接受float类型为int,默认true
      READ_ENUMS_USING_TO_STRING 使用字符串读取枚举,默认false
      READ_UNKNOWN_ENUM_VALUES_AS_NULL 将未知的枚举值读取为NULL,默认false
      READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE 使用默认值读取未知的枚举值,默认false
      READ_DATE_TIMESTAMPS_AS_NANOSECONDS 读取日期时间戳记,默认true
      ADJUST_DATES_TO_CONTEXT_TIME_ZONE 调整日期到时区,默认true
      EAGER_DESERIALIZER_FETCH EAGER反序列化器
    • JsonInclude.Include

      通过@JsonInclude的value属性设置

      常量 描述
      ALWAYS 默认,序列化所有属性
      NON_NULL 属性为NULL 不序列化
      NON_ABSENT 同 NON_NULL
      NON_EMPTY 属性为 空字符串或 NULL 都不序列化
      NON_DEFAULT 属性为默认值不序列化
      CUSTOM 定制
      USE_DEFAULTS 序列化默认值
    • JsonParser.Feature

      通过ObjectMapper对象enable/disable方法

      常量 描述
      AUTO_CLOSE_SOURCE 解析json自动关闭输入源,默认true
      ALLOW_COMMENTS 解析json许解析使用Java/C++ 样式的注释,默认false
      ALLOW_YAML_COMMENTS 解析json许解析使用YAML 样式的注释,默认false
      ALLOW_UNQUOTED_FIELD_NAMES 解析json允许使用非双引号属性名字,默认false
      ALLOW_SINGLE_QUOTES 解析json允许单引号来包住属性名称和字符串值,默认false
      STRICT_DUPLICATE_DETECTION 解析json严格重复校验,有重复字段抛异常,默认false
      IGNORE_UNDEFINED 忽略未定义
      INCLUDE_SOURCE_IN_LOCATION 在位置包含来源
    • JsonParser.NumberType

      常量 描述
      INT int类型
      LONG long类型
      BIG_INTEGER BigInteger类型
      FLOAT float类型
      DOUBLE Double类型
      BIG_DECIMAL BigDecimal类型
    • JsonGenerator.Feature

      通过ObjectMapper对象configure/enable/disable方法设置

      常量 描述
      AUTO_CLOSE_TARGET 自动关闭目标
      AUTO_CLOSE_JSON_CONTENT 自动关闭JSON内容
      FLUSH_PASSED_TO_STREAM 刷新流
      WRITE_BIGDECIMAL_AS_PLAIN bigdecimal类型写入
      STRICT_DUPLICATE_DETECTION 严格重复校验
      IGNORE_UNKNOWN 忽略未定义
    • MapperFeature
      通过ObjectMapper对象configure/enable/disable方法设置

      常量 描述
      USE_ANNOTATIONS 使用注解,默认true
      USE_GETTERS_AS_SETTERS 使用get与set方法,默认true
      PROPAGATE_TRANSIENT_MARKER 忽略 transient 修饰的属性,默认false
      AUTO_DETECT_CREATORS 自动检测创建者
      AUTO_DETECT_FIELDS 自动检测字段
      AUTO_DETECT_GETTERS 自动检测getter方法
      AUTO_DETECT_IS_GETTERS 自动检测是否是getter方法
      AUTO_DETECT_SETTERS 自动检测setter方法
      REQUIRE_SETTERS_FOR_GETTERS 需要使用get与set方法,默认false
      ALLOW_FINAL_FIELDS_AS_MUTATORS 允许final修饰字段可修改,默认true
      INFER_PROPERTY_MUTATORS 推断字段可修改,默认true
      INFER_CREATOR_FROM_CONSTRUCTOR_PROPERTIES 从构造函数属性推断创建者,默认true
      CAN_OVERRIDE_ACCESS_MODIFIERS 可以覆盖访问修饰符,默认true
      OVERRIDE_PUBLIC_ACCESS_MODIFIERS 覆盖公共访问修饰符,默认true
      USE_STATIC_TYPING 使用静态类型,默认false
      DEFAULT_VIEW_INCLUSION 默认包含视图,默认true
      SORT_PROPERTIES_ALPHABETICALLY 按字母排序,默认false
      ACCEPT_CASE_INSENSITIVE_PROPERTIES 接受字段命名不敏感,默认false
      ACCEPT_CASE_INSENSITIVE_ENUMS 接受枚举命名不敏感,默认false
      USE_WRAPPER_NAME_AS_PROPERTY_NAME 使用包装器名称作为属性名称,默认false
      USE_STD_BEAN_NAMING 使用标准Bean命名法,默认false
      ALLOW_EXPLICIT_PROPERTY_RENAMING 允许显式属性重命名,默认false
      ALLOW_COERCION_OF_SCALARS 允许强制标量,默认true
      IGNORE_DUPLICATE_MODULE_REGISTRATIONS 忽略重复的模块注册,默认true
      IGNORE_MERGE_FOR_UNMERGEABLE 忽略合并为不可合并,默认true
    • JsonFactory.Feature

      常量 描述
      INTERN_FIELD_NAMES 内部字段名,默认true
      CANONICALIZE_FIELD_NAMES 规范字段名,默认true
      FAIL_ON_SYMBOL_HASH_OVERFLOW 哈希溢出失败,默认true
      USE_THREAD_LOCAL_FOR_BUFFER_RECYCLING 使用本地线程进行缓冲区回收,默认true
    • PropertyNamingStrategy

      通过ObjectMapper对象setPropertyNamingStrategy方法设置

      常量 描述
      SNAKE_CASE 蛇形命名法,例如:abc_def
      UPPER_CAMEL_CASE 大驼峰命名法,例如:AbcDef
      LOWER_CAMEL_CASE 小驼峰命名法,例如:abcDef
      LOWER_CASE 全小写命名法,例如:abcdef
      KEBAB_CASE Lisp风格命名法,例如:abc-def
    • JsonAutoDetect.Visibility

      在@JsonAutoDetect中配置

      常量 描述
      ANY 自动发现所有修饰符的属性
      NON_PRIVATE 自动发现除被private修饰以外的属性;当字段及get/set方法被private修饰时,则该字段不被自动发现
      PROTECTED_AND_PUBLIC 自动发现protected与public修饰的属性
      PUBLIC_ONLY 仅自动被public修饰的属性
      NONE 指禁止发现所有的属性,但是对getter/setter方法无效
      DEFAULT 默认,同PUBLIC_ONLY
    • JsonProperty.Access (字段权限常量)

      在@JsonProperty的属性access配置

      常量 描述
      AUTO 自动
      READ_ONLY 只读
      WRITE_ONLY 只写
      READ_WRITE 可读写
    • JsonSerialize.Typing

      常量 描述
      DYNAMIC 动态
      STATIC 静态
      DEFAULT_TYPING 默认
    • JsonTypeInfo.Id

      常量 描述
      NONE 不使用识别码
      CLASS 使用完全限定类名做识别
      MINIMAL_CLASS 若基类和子类在同一包类,使用类名(忽略包名)作为识别码
      NAME 一个合乎逻辑的指定名称
      CUSTOM 自定义识别码,由@JsonTypeIdResolver对应
    • JsonTypeInfo.As

      常量 描述
      PROPERTY 作为数据的兄弟属性
      WRAPPER_OBJECT 作为一个包装的对象
      WRAPPER_ARRAY 作为一个包装的数组
      EXTERNAL_PROPERTY 作为扩展属性
      EXISTING_PROPERTY 作为POJO中已经存在的属性
    • 1

  2. 常用注解

    注解 描述(常用属性)
    @JsonIgnore 忽略字段,字段,get与set方法上
    value:默认为true,为false不忽略
    @JsonIgnoreProperties 忽略字段,类上
    value: 数组,指定要忽略的字段
    ignoreUnknown:默认false,忽略不知道字段
    allowGetters: 默认false,允许从get方法获取值
    allowSetters():默认false,允许set方法设置值
    @JsonIgnoreType 该类作为别的类的属性时,该属性忽略序列化和反序列化。
    value:默认为true,为false不忽略
    @JsonProperty json字段
    value:指定json字段
    access:指定权限,
    @JsonInclude 指定排除某些字段;字段,类,参数,set与get方法上
    value:指定不显示某类字段
    valueFilter:自定义字段排除;value设为CUSTOM,valueFilter为一个重写equals的类,返回true的排除
    @JsonAlias 别名,只在反序列化生效;字段,方法,参数上
    value:生成的json字段
    @JsonDeserialize 指定自定义反序列化器;字段,方法,参数上
    using:指定自定义反序列化器
    @JsonSerialize 指定自定义序列化器;字段,方法,参数上
    using:指定自定义序列化器
    @JsonMerge
    @JsonFilter 指定使用所添加的过滤器;字段,方法,参数上
    value:过滤器名
    @JsonAutoDetect 自动检测配置;类上
    fieldVisibility:字段自动检测配置
    @JsonFormat json格式配置;字段,方法,参数上
    pattern: 配置日期格式,yyyy-MM-dd HH:mm:ss
    timezone: 配置时区,GMT+8
    @JsonUnwrapped 对象扁平化配置,字段,方法,参数上
    enabled:启用配置,默认true
    prefix: 字段添加的前缀
    suffix:字段添加的后缀
    @JsonView 同对象可配置Controller返回不同字段的json,
    value:对象内部接口类,标记的作用。
    在对象字段方法上用该注解表明展示那些字段,在Controller中再用该字段表明使用哪组字段,内部接口类可实现继承关系
    @JsonClassDescription 类描述
    @JsonPropertyDescription 字段描述
    @JacksonInject json默认值注入配置,字段,方法,参数上
    value:用于InjectableValues配置的标识
    @JsonAnySetter 获取反序列时未匹配上的字段,作用在set方法上
    enabled:启用状态,默认为true
    @JsonAnyGetter 获取反序列时未匹配上的字段,作用在get方法上
    enabled:启用状态,默认为true
    @JsonCreator 指定反序列化时用的构造函数,默认采用无参构造
    反序列化时没有无参构造会报错,需用该注解指定构造方法,并@JsonProperty指明个参数
    @JsonSetter 指定反序列化字段名,set方法上
    value:指定字段名
    @JsonGetter 指定序列化字段名,get方法上
    value:指定字段名
    @JsonEnumDefaultValue 设置枚举默认值
    @JsonPropertyOrder 序列化时字段排序,类上
    value:字段顺序数组,未配字段排在后面
    @JsonRawValue 可用于按原样序列化属性;方法,字段上
    value:默认为true,为false不生效
    为true时,json格式字段按json格式处理
    @JsonValue json值,一个类只能有一个,序列化直接返回该值;方法,字段上
    value:默认为true,为false不生效
    @JsonRootName 当配置带根目录序列化及反序列化时配置根节点;类上
    value:根节点名称
    @JsonTypeInfo 作用于父类/接口,被用来开启多态类型处理,对基类/接口和子类/实现类都有效
    use:定义使用哪一种类型识别码
    include(可选):指定识别码是如何被包含进去的
    property(可选):制定识别码的属性名称
    defaultImpl(可选):如果类型识别码不存在或者无效,可以使用该属性来制定反序列化时默认类型
    visible(可选,默认为false):是否可见
    @JsonSubTypes 作用于父类/接口,用来列出给定类的子类,只有当子类类型无法被检测到时才会使用它,一般是配合@JsonTypeInfo在基类上使用
    value: 指定子类
    @JsonTypeName 作用于子类,用来为多态子类指定类型标识符的值,
    value: 子类指定类型标识符,对应JsonSubTypes.Type的name属性
    @JsonTypeIdResolver 配置类型id解析器,当JsonTypeInfo属性use为JsonTypeInfo.Id.CUSTOM时使用
    value: 解析器
    @JsonTypeId 字段上标记为类型识别码
    @JsonManagedReference 解决双向引用导致的无限递归问题,字段上
    标注在循环引用要序列化的字段上
    @JsonBackReference 解决双向引用导致的无限递归问题,字段上
    标注在循环引用要忽略的字段上
    @JsonIdentityReference 用来解决循环嵌套的问题
    alwaysAsId: 始终按id,默认为false
    @JsonIdentityInfo 用来解决循环嵌套的问题,为每个对象添加一个唯一标识,默认字段为@id,可通过property修改
    generator: 对象id生成器
    property 唯一标识字段
  3. 常用接口实现类及抽象类子类

    • FilterProvider

      可通过ObjectMapper的setFilterProvider方法设置

      • SimpleFilterProvider
      方法 描述
      addFilter(String id, PropertyFilter filter) 添加过滤器,id用来匹配实体上
      @JsonFilter注解value属性,
      不同实体采用不同过滤器
      removeFilter(String id) 移除过滤器
      setDefaultFilter(PropertyFilter f) 设置默认过滤器,实体没配@JsonFilter时使用该过滤器
      setFailOnUnknownId(boolean state) 设置未知id是否失败
    • PropertyFilter

      • SimpleBeanPropertyFilter
      方法 描述
      serializeAll() 序列化全部
      filterOutAllExcept(String… propertyArray) 指定要序列化的字段,参数可为set
      serializeAllExcept(String… propertyArray) 指定不要序列化的字段,参数可为set
      from(BeanPropertyFilter src) 从另一个过滤器获取
    • InjectableValues

      可通过ObjectMapper的setInjectableValues方法设置

      • Std
      方法 描述
      addValue(String key, Object value) 与@JacksonInject同用.用于通过key为反序列化json为定义的字段注入默认值
    • ObjectIdGenerator 对象id生成器

      实现类 描述
      StringIdGenerator 字符串id生成器
      UUIDGenerator UUID生成器
      IntSequenceGenerator 有序数列生成器
      PropertyBasedObjectIdGenerator 基础字段id生成器
    • Module

      • Jdk8Module 支持jdk8日期类型

      • SimpleModule 可用于自定义模块

      方法 描述
      addSerializer(Class type,
      JsonSerializer ser)
      添加某种数据类型的序列化器
      addDeserializer(Class type,
      JsonDeserializer deser)
      添加某种数据类型的反序列化器
      setSerializers(SimpleSerializers s) 添加多组序列化器
      setDeserializers(SimpleDeserializers d) 添加多组反序列化器
      • JavaTimeModule SimpleModule子类,处理不同的时区偏移格式

      • ParameterNamesModule SimpleModule子类,参数名称模块

      • JsonComponentModule SimpleModule子类json组件称模块

  4. 实例

    • 简单使用
    List<Person> list =new ArrayList();
    Person person = new Person();
    person.setName("zp");
    list.add(person);
    String jsonString = mapper.writeValueAsString(list);
    System.out.println(jsonString);
    List<Person> list1 = mapper.readValue(jsonString, 
                        new TypeReference<List<Person>>() {});//json转list
    Person person1 = mapper.readValue(jsonString,Person.class);//json转JavaBean
    
    • 泛型使用示例
    //list泛型
    CollectionType JavaType = mapper.getTypeFactory().constructCollectionType(List.class, Person.class);
    List<Person> personList = mapper.readValue(JSONInString, JavaType); 
    List<Person> personList = mapper.readValue(JSONInString, new TypeReference<List<Person>>(){});
    //map泛型
    MapType JavaType = mapper.getTypeFactory().constructMapType(HashMap.class,String.class,Person.class);
     Map<String, Person> personMap = mapper.readValue(JSONInString,JavaType);
     Map<String, Person> personMap = mapper.readValue(JSONInString, new TypeReference<Map<String, Person>>() {});
    
    • 自定义序列化器
      public class DateJsonSerializer extends JsonSerializer<Date> {
        public static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        @Override
        public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
         jsonGenerator.writeString(format.format(date));
        }
    }
    
    • 自定义反序列化
    public class DateJsonDeserializer extends JsonDeserializer<Date> {
        public static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        @Override
        public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) {
            try {
                if (jsonParser != null && jsonParser.getText() != null) {
                    return format.parse(jsonParser.getText());
                } else {
                    return null;
                }
            } catch (Exception e) {
                throw new RuntimeException(e);
         }
        }
    }
    
    • 反序列化未定义字段采用map接收
     //实体类新增map字段
        private Map<String,Object> other = new HashMap<>();
    	//新增以下get/set方法
        @JsonAnyGetter
        public Map<String, Object> getOther() {
            return other;
        }
        @JsonAnySetter
        public void setOther(Map<String,Object> map) {
            this.other  =m6ap;
        }
    
  5. 其他

    • jsr310

      处理日期类型为 Java.time.LocalDate,引入依赖并注册以下模块

       objectMapper.registerModule(new JSR310Module ())
      
    • joda

      处理日期类型为org.joda.time.DateTime,引入依赖并注册以下模块

      mapper.registerModule(new JodaModule())
      

你可能感兴趣的:(常用类库API,json)