方法 | 描述 |
---|---|
registerModule(Module module) | 注册模块 |
registerModules(Module… modules) | 注册多个模块 |
findAndRegisterModules() | 查找并注册模块 |
setSerializerFactory(SerializerFactory f) | 设置序列化工厂 |
setSerializerProvider(DefaultSerializerProvider p) | 设置序列化提供者 |
setMixIns(Map |
设置混合类型 |
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) | 获取的模块 |
常量
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
常用注解
注解 | 描述(常用属性) |
---|---|
@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 唯一标识字段 |
常用接口实现类及抽象类子类
FilterProvider
可通过ObjectMapper的setFilterProvider方法设置
方法 | 描述 |
---|---|
addFilter(String id, PropertyFilter filter) | 添加过滤器,id用来匹配实体上 @JsonFilter注解value属性, 不同实体采用不同过滤器 |
removeFilter(String id) | 移除过滤器 |
setDefaultFilter(PropertyFilter f) | 设置默认过滤器,实体没配@JsonFilter时使用该过滤器 |
setFailOnUnknownId(boolean state) | 设置未知id是否失败 |
PropertyFilter
方法 | 描述 |
---|---|
serializeAll() | 序列化全部 |
filterOutAllExcept(String… propertyArray) | 指定要序列化的字段,参数可为set |
serializeAllExcept(String… propertyArray) | 指定不要序列化的字段,参数可为set |
from(BeanPropertyFilter src) | 从另一个过滤器获取 |
InjectableValues
可通过ObjectMapper的setInjectableValues方法设置
方法 | 描述 |
---|---|
addValue(String key, Object value) | 与@JacksonInject同用.用于通过key为反序列化json为定义的字段注入默认值 |
ObjectIdGenerator 对象id生成器
实现类 | 描述 |
---|---|
StringIdGenerator | 字符串id生成器 |
UUIDGenerator | UUID生成器 |
IntSequenceGenerator | 有序数列生成器 |
PropertyBasedObjectIdGenerator | 基础字段id生成器 |
Module
Jdk8Module 支持jdk8日期类型
SimpleModule 可用于自定义模块
方法 | 描述 |
---|---|
addSerializer(Class extends T> type, JsonSerializer ser) |
添加某种数据类型的序列化器 |
addDeserializer(Class type, JsonDeserializer extends T> deser) |
添加某种数据类型的反序列化器 |
setSerializers(SimpleSerializers s) | 添加多组序列化器 |
setDeserializers(SimpleDeserializers d) | 添加多组反序列化器 |
JavaTimeModule SimpleModule子类,处理不同的时区偏移格式
ParameterNamesModule SimpleModule子类,参数名称模块
JsonComponentModule SimpleModule子类json组件称模块
实例
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字段
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;
}
其他
jsr310
处理日期类型为 Java.time.LocalDate,引入依赖并注册以下模块
objectMapper.registerModule(new JSR310Module ())
joda
处理日期类型为org.joda.time.DateTime,引入依赖并注册以下模块
mapper.registerModule(new JodaModule())