千家信息网

Jackson中的JSON Configure()方法怎么用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容主要讲解"Jackson中的JSON Configure()方法怎么用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Jackson中的JSON C
千家信息网最后更新 2026年11月03日Jackson中的JSON Configure()方法怎么用

本篇内容主要讲解"Jackson中的JSON Configure()方法怎么用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Jackson中的JSON Configure()方法怎么用"吧!

Jackson 是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架。

1. #configure(JsonParser.Feature, boolean):

功能名称描述默认值
AUTO_CLOSE_SOURCE会自动关闭传入的 InputStream 或 Readertrue
ALLOW_COMMENTS允许在 JSON 中使用 Java/C++ 风格的注释。false
ALLOW_YAML_COMMENTS允许在 JSON 中使用 YAML 样式的注释。false
ALLOW_UNQUOTED_FIELD_NAMES允许写不带引号的字段false
ALLOW_SINGLE_QUOTES允许使用撇号、字符 '\'' 而不是标准引号false
STRICT_DUPLICATE_DETECTION如果找到重复的字段,则抛出异常false
IGNORE_UNDEFINED在未找到输入内容包含的属性的定义的情况下使用。在JSON解析的情况下没有作用false
INCLUDE_SOURCE_IN_LOCATION在 JsonLocation 中包含源参考信息。如果该功能被禁用,则会打印 UNKNOWN locationtrue
public class StrictDuplicateMapper {    public static void main(String[] args) throws JsonProcessingException {        String json = "{" +                  "\"name\":\"Ali Z\", " +                  "\"name\":\"Ali Zh\"" + // will throw exception because that field is duplicated                "}";        ObjectMapper mapper = new ObjectMapper()                .configure(JsonParser.Feature.STRICT_DUPLICATE_DETECTION, true)                .enable(JsonParser.Feature.STRICT_DUPLICATE_DETECTION);// another way of enabling featur        mapper.readValue(json, Person.class);    }    public static class Person {        private String name;        @JsonCreator        public Person(@JsonProperty("name") String name) {            this.name = name;        }        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }    }}

2. ObjectMapper#configure(JsonGenerator.Feature, boolean):

功能名称描述默认值
AUTO_CLOSE_TARGET会自动关闭传入的 InputStream 或 Readertrue
AUTO_CLOSE_JSON_CONTENT如果生成器关闭,确定如何处理 JsonToken.START_ARRAY 或 JsonToken.START_OBJECT。如果启用,这些元素会自动关闭;如果禁用,则不执行任何特定操作true
FLUSH_PASSED_TO_STREAM如果启用调用 JsonGenerator#flush 将具有与 OutputStream 或 Writer 中的 flush() 相同的效果true
WRITE_BIGDECIMAL_AS_PLAIN将使用 BigDecimal.toPlainString() 将 BigDecimal 写为纯文本false
STRICT_DUPLICATE_DETECTION如果找到重复的字段,则抛出异常false
IGNORE_UNKNOWN如果没有关于必填字段的信息,将抛出 JsonProcessingException。序列化 JSON 时无效。false
public class JsonGeneratorExample {    public static void main(String[] args) throws IOException {        ObjectMapper mapper = new ObjectMapper()                .configure(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN, true);        Person person = new Person();        person.setAge(BigDecimal.valueOf(12334535345456700.12345634534534578901));        String json = mapper.writeValueAsString(person);        System.out.println(json);    }    public static class Person {        private BigDecimal age;        public BigDecimal getAge() {            return age;        }        public void setAge(BigDecimal age) {            this.age = age;        }    }}

3. ObjectMapper#configure(SerializationFeature, boolean):

功能名称描述默认值
WRAP_ROOT_VALUE

如果启用将包装根值。该功能主要用于 JAXB 兼容性。

如果禁用 JSON 将如下所示:

{"name":"Ali Z"}

如果启用 JSON 将如下所示:

{"Person":{"name":"Ali Z"}}
false
INDENT_OUTPUT

将缩进输出 JSON 字符串。

如果禁用 JSON 将如下所示:

{"name":"Ali Z"}

如果启用 JSON 将如下所示:

{"name":"Ali Z"}
false
FAIL_ON_EMPTY_BEANS如果没有像 getter 这样的字段的访问器,则会抛出异常。true
FAIL_ON_SELF_REFERENCES如果在 POJO 对象中检测到直接自引用,将抛出特定于 Jackson 的异常。注意如果它被禁用它可能会抛出 StackOverflowErrortrue
WRAP_EXCEPTIONS如果启用,Jackson 将捕获序列化期间抛出的异常,并通过提供附加信息将其与 Jackson 异常包装起来。如果禁用将抛出原始异常。false
FAIL_ON_UNWRAPPED_TYPE_IDENTIFIERS将抛出异常,如果对象具有类型信息但它被标记为 @JsonUnwrapped。如果禁用类型信息将被忽略true
WRITE_SELF_REFERENCES_AS_NULL将自我导向的引用写为 null。注意 SerializationFeature.FAIL_ON_SELF_REFERENCES 配置被禁用。false
CLOSE_CLOSEABLE如果启用,将 close() 流传递给 writeValue。如果要禁用该功能还要注意 JsonGenerator.Feature.AUTO_CLOSE_TARGET 配置false
WRITE_DATES_AS_TIMESTAMPS如果启用,Jackson 将序列化用作 Map 键的 java.util.Date(也是子类型)将被序列化为时间戳。如果禁用,将使用 ISO-8601 进行序列化(例如:2021-06-20T10:22:34.364+00:00)false
WRITE_DATES_WITH_ZONE_ID

如果启用,则包括时区信息。例如:

2011-12-03T10:15:30+01:00[欧洲/巴黎]
false
WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS

如果启用会将 char[] 作为 JSON 数组,

{"surname":["Z","h","a","g","p","a","r","o","v"]}

如果禁用将其写为子字符串

{"surname":"Zhagparov"}
false
WRITE_ENUMS_USING_TO_STRING

这两个配置配置了枚举序列化为 JSON 的方式。

如果启用 WRITE_ENUMS_USING_TO_STRING 并且禁用 WRITE_ENUMS_USING_INDEX,它将使用 toString() 序列化枚举

{"permissionEnum":"管理员"}
false
WRITE_ENUMS_USING_INDEX

如果禁用 WRITE_ENUMS_USING_TO_STRING 并启用 WRITE_ENUMS_USING_INDEX,它将使用 Enum.ordinal() 序列化枚举

{"permissionEnum":0}
false
WRITE_ENUM_KEYS_USING_INDEX

如果启用,它将使用 Enum.ordinal() 将 Map 中使用的枚举序列化为键

{"permissionEnum":{"0":"admin"}}

如果禁用,它将使用 Enum.toString() 序列化枚举

{"permissionEnum":{"ADMIN":"admin"}}
false
WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED

如果启用,则不会将包含一个元素的 List 转换为 JSON 数组

{"stringList":"Ali Z"}

如果禁用,它会将具有一个元素的 List 转换为 JSON 数组

{"stringList":["Ali Z"]}
false
WRITE_DATE_TIMESTAMPS_AS_NANOOSECONDS

如果启用,将以纳秒为单位写入日期时间戳。

{"date":[2021,6,20,14,16,48,260]}

如果禁用,

{"date":[2021,6,20,14,17,12,990000000]}
true
ORDER_MAP_ENTRIES_BY_KEYS如果启用,将在序列化之前按键对 Map 条目进行排序。如果禁用,则不会执行排序。false
EAGER_SERIALIZER_FETCH如果启用,ObjectWriter 将尝试急切地获取必要的 JsonSerializer-s。true
USE_EQUALITY_FOR_OBJECT_ID

如果启用,将使用 Object.equal() 方法作为对象标识。

如果禁用,将使用真正的 JVM 级别标识作为对象标识。

false
public class JsonSerializationFeatureExample {    public static void main(String[] args) throws IOException {        ObjectMapper mapper = new ObjectMapper()                .configure(SerializationFeature.WRAP_ROOT_VALUE, true)                .configure(SerializationFeature.INDENT_OUTPUT, true);        Person person = new Person();        person.setName("Ali Z");        String json = mapper.writeValueAsString(person);        System.out.println(json);    }    public static class Person {        private String name;        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }    }}

4. ObjectMapper#configure(DeserializationFeature, boolean):

功能名称描述默认值
USE_BIG_DECIMAL_FOR_FLOATS如果启用且字段类型为 Object 或 Number,它将反序列化浮点数为 BigDecimal;如果禁用,它将被反序列化为 Double。false
USE_BIG_INTEGER_FOR_INTS如果启用且字段类型为 Object 或 Number,它将反序列化非浮点数为 BigInteger。如果禁用,将使用最紧凑的变体。false
USE_LONG_FOR_INTS如果启用并且字段类型为 Object 或 Number,它将反序列化非浮点数为 Long;如果禁用,将使用最紧凑的变体。false
USE_JAVA_ARRAY_FOR_JSON_ARRAY如果启用并且字段类型未知,例如 Object,Jackson 会将 JSON 数组反序列化为 Object[];如果禁用,将反序列化为 Listfalse
FAIL_ON_UNKNOWN_PROPERTIES如果启用,如果发现未知属性,Jackson 将抛出异常。如果禁用将忽略这样的字段。true
FAIL_ON_NULL_FOR_PRIMITIVES如果启用,如果 JSON 包含原始类型的空值,Jackson 将抛出异常。如果禁用默认值(如 0.0、0 等)将被使用。false
FAIL_ON_NUMBERS_FOR_ENUMS如果启用,如果 JSON 包含枚举的数字值,Jackson 将抛出异常。如果禁用该值将与 Enum.ordinal() 匹配false
FAIL_ON_READING_DUP_TREE_KEY如果启用,如果找到重复的树键将失败。如果禁用,则不会引发异常,并且后面的值会覆盖前面的值。false
FAIL_ON_IGNORED_PROPERTIES如果启用并且 JSON 包含显式标记为可忽略的值,则将引发异常。如果禁用,这些字段将被忽略。false
FAIL_ON_MISSING_CREATOR_PROPERTIES如果启用,如果 JSON 数据字段未在 POJO 中描述,Jackson 将抛出异常。如果禁用,将为未知字段设置 null。false
FAIL_ON_NULL_CREATOR_PROPERTIES如果启用,如果一个或多个字段作为null 传递给构造函数或静态工厂方法,将引发异常。如果禁用,将忽略此类情况。false
WRAP_EXCEPTIONS如果启用,Jackson 将捕获反序列化期间抛出的异常,并通过提供附加信息将其与 Jackson 异常包装在一起。如果禁用将抛出原始异常。true
ACCEPT_SINGLE_VALUE_AS_ARRAY如果启用 Jackson 将接受单个值作为数组。如果禁用,则将抛出异常。false
UNWRAP_SINGLE_VALUE_ARRAYS如果启用,它将解包单个值数组并将其反序列化为相应的数据类型。如果禁用,将抛出异常。false
UNWRAP_ROOT_VALUE

如果启用,它将解包根值。这意味着它将接受这样的 JSON

{"Person":{"name":"Ali Z"}}

作为

{"name":"Ali Z"}
false
ACCEPT_EMPTY_STRING_AS_NULL_OBJECT

如果启用,对于空字符串,如果与 POJO 字段数据类型不匹配,Jackson 将不会失败

public static class Person{    private int age;}

和 JSON 看起来像那样

{"age":""}

Jackson 将设置 null 而不是抛出异常。

false
ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT

如果启用,Jackson 不会在与 POJO 字段数据类型不匹配的情况下失败,对于空字符串

public static class Person{    private int age;}

和 JSON 看起来像那样

{"age":[]}

Jackson 将设置 null 而不是抛出异常。

false
ACCEPT_FLOAT_AS_INT如果启用,将通过截断数字将浮点数转换为非浮点数(如 Long、long、int 等)。true
READ_ENUMS_USING_TO_STRING如果启用,它将使用字符串反序列化 Enum。如果禁用,将使用 Enum.ordinal();false
READ_UNKNOWN_ENUM_VALUES_AS_NULL如果启用,它会将未知的枚举值反序列化为 null。如果禁用将抛出异常。false
READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE如果启用,它将设置为使用 @JsonEnumDefaultValue 值预定义的未知枚举值。如果禁用,它将抛出异常。false
READ_DATE_TIMESTAMPS_AS_NANOOSECONDS如果启用,杰克逊将期望以纳秒为单位写入时间戳。如果禁用,时间戳预计以毫秒为单位。true
ADJUST_DATES_TO_CONTEXT_TIME_ZONE如果启用,它将调整日期属性时区。如果禁用,则只会在值本身不包含时区时进行调整。true
public class DeserializeExample {    public static void main(String[] args) throws JsonProcessingException {        ObjectMapper mapper = new ObjectMapper()                .configure(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES, true)                .enable(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES);        Person person = mapper.readValue("{}", Person.class);    }    public static class Person {        private Integer age;        @JsonCreator        public Person(@JsonProperty("age") Integer age) {            this.age = age;        }        public Integer getAge() {            return age;        }        public void setAge(Integer age) {            this.age = age;        }        @Override        public String toString() {            return "Person{" +                    "age=" + age +                    '}';        }    }}

到此,相信大家对"Jackson中的JSON Configure()方法怎么用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

序列 字段 类型 信息 功能 方法 数组 点数 名称 字符 对象 情况 数据 配置 原始 元素 内容 单位 字符串 属性 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 保险科技 互联网保险 互联网科技产业 北京互联网科技 有马互联网科技 奇酷互联网科技 齐家互联网科技 互联网科技类展会 成都玖崟互联网科技有限公司乐商圈怎么样 西藏七维空间互联网科技有限公司 互联网科技实习生岗位职责 互联网科技产业特征 速维有品互联网信息科技(苏州)有限公司 广州市恰铎互联网科技有限公司 深圳育鹏互联网科技有限公司招聘 青海科技产业互联网发展 朱啸虎曾投资哪些互联网科技企业 美国互联网科技公司 本届互联网大会上的黑科技 有人说阿里系是互联网科技企业 承德科技产业互联网平台 青岛互联网科技公司 互联网科技视频 科技创新互联网企业 美国互联网黑科技 北京三清互联网科技 哈尔滨屹滨互联网科技有限公司 高科技互联网套路 黑科技 体验场景 互联网大会 长沙渺峰互联网科技有限公司 黑龙江互联网科技公司
0