Jackson 是當(dāng)前用的比較廣泛的,用來(lái)序列化和反序列化 json 的 Java 的開(kāi)源框架。下面文章將和大家講講 Jackson中的json中的Configure()方法的詳細(xì)內(nèi)容。
1. #configure(JsonParser.Feature, boolean):
功能名稱 | 描述 | 默認(rèn)值 |
---|---|---|
AUTO_CLOSE_SOURCE | 會(huì)自動(dòng)關(guān)閉傳入的 InputStream 或 Reader | true |
ALLOW_COMMENTS | 允許在 JSON 中使用 Java/C++ 風(fēng)格的注釋。 | false |
ALLOW_YAML_COMMENTS | 允許在 JSON 中使用 YAML 樣式的注釋。 | false |
ALLOW_UNQUOTED_FIELD_NAMES | 允許寫不帶引號(hào)的字段 | false |
ALLOW_SINGLE_QUOTES | 允許使用撇號(hào)、字符 '\'' 而不是標(biāo)準(zhǔn)引號(hào) | false |
STRICT_DUPLICATE_DETECTION | 如果找到重復(fù)的字段,則拋出異常 | false |
IGNORE_UNDEFINED | 在未找到輸入內(nèi)容包含的屬性的定義的情況下使用。在JSON解析的情況下沒(méi)有作用 | false |
INCLUDE_SOURCE_IN_LOCATION | 在 JsonLocation 中包含源參考信息。如果該功能被禁用,則會(huì)打印 UNKNOWN location | true |
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):
功能名稱 | 描述 | 默認(rèn)值 |
---|---|---|
AUTO_CLOSE_TARGET | 會(huì)自動(dòng)關(guān)閉傳入的 InputStream 或 Reader | true |
AUTO_CLOSE_JSON_CONTENT | 如果生成器關(guān)閉,確定如何處理 JsonToken.START_ARRAY 或 JsonToken.START_OBJECT。如果啟用,這些元素會(huì)自動(dòng)關(guān)閉;如果禁用,則不執(zhí)行任何特定操作 | true |
FLUSH_PASSED_TO_STREAM | 如果啟用調(diào)用 JsonGenerator#flush 將具有與 OutputStream 或 Writer 中的 flush() 相同的效果 | true |
WRITE_BIGDECIMAL_AS_PLAIN | 將使用 BigDecimal.toPlainString() 將 BigDecimal 寫為純文本 | false |
STRICT_DUPLICATE_DETECTION | 如果找到重復(fù)的字段,則拋出異常 | false |
IGNORE_UNKNOWN | 如果沒(méi)有關(guān)于必填字段的信息,將拋出 JsonProcessingException。序列化 JSON 時(shí)無(wú)效。 | 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):
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):
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 +
'}';
}
}
}