欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot使用Jackson詳解

 更新時(shí)間:2025年02月13日 15:41:42   作者:越過(guò)難題  
Spring?Boot中使用Jackson處理JavaBean序列化為JSON格式,常用框架包括Jackson、Fastjson和Gson,Jackson是Spring?Boot默認(rèn)的JSON處理庫(kù),常用注解如@JsonProperty、@JsonIgnore、@JsonFormat等,用于自定義序列化和反序列化行為

概述

Springboot配置JackSon處理類屬性,JavaBean序列化為JSON格式,常用框架:阿里fastjson,谷歌gson、Jackson等。

  • ① 性能:Jackson > Fastjson > Gson >同個(gè)結(jié)構(gòu)
  • ② Jackson、Fastjson、Gson 類庫(kù)各有特點(diǎn),各有自己的專長(zhǎng)

Jackson是spring-boot-starter-json依賴的一部分,spring-boot-starter-web中包含spring-boot-starter-json。也就是說(shuō)當(dāng)項(xiàng)目中引入了

spring-boot-starter-web后會(huì)自動(dòng)引入spring-boot-starter-json,而不需要單獨(dú)引入。

常用注解

基礎(chǔ)注解

注解用法
@JsonProperty用于屬性,把屬性的名稱序列化時(shí)轉(zhuǎn)換為另外一個(gè)名稱。示例:@JsonProperty("birth_date") private Date birthDate
@JsonIgnore可用于字段、getter/setter、構(gòu)造函數(shù)參數(shù)上,作用相同,都會(huì)對(duì)相應(yīng)的字段產(chǎn)生影響。使相應(yīng)字段不參與序列化和反序列化。
@JsonIgnoreProperties該注解是類注解,使得相應(yīng)字段不參與序列化和反序列化。eg:@JsonIgnoreProperties({"password","id"}) public class Person
@JsonFormat用于屬性或者方法,把屬性的格式序列化時(shí)轉(zhuǎn)換成指定的格式。示例:@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm") public Date getBirthDate()
@JsonPropertyOrder該注解是類注解,和 @JsonProperty的index屬性類似,指定屬性在序列化時(shí) json 中的順序 , 示例:@JsonPropertyOrder({ "birth_Date", "name" }) public class Person
@JsonCreator用于構(gòu)造方法,和 @JsonProperty 配合使用,適用有參數(shù)的構(gòu)造方法。示例:@JsonCreator public Person(@JsonProperty("name")String name) {…}
@JsonAnySetter用于屬性或者方法,設(shè)置未反序列化的屬性名和值作為鍵值存儲(chǔ)到 map 中 @JsonAnySetter public void set(String key, Object value) { map.put(key, value); }
@JsonAnyGetter應(yīng)用于屬性或方法,獲取所有未序列化的屬性 public Map<String, Object> any() { return map; }
@JsonSetter應(yīng)用于屬性或方法,指定反序列化的字段名 @JsonSetter("_id") public String setId(String id) { return this.id=id; }
@JsonGetter應(yīng)用于方法或字段,指定序列化的字段名 @JsonGetter("_id") public String getId() { return id; }
@JsonNaming類注解。序列化的時(shí)候該注解可將駝峰命名的字段名轉(zhuǎn)換為下劃線分隔的小寫(xiě)字母命名方式。反序列化的時(shí)候可以將下劃線分隔的小寫(xiě)字母轉(zhuǎn)換為駝峰命名的字段名。示例:@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
@JsonRootName類注解。需開(kāi)啟mapper.enable(SerializationFeature.WRAP_ROOT_VALUE),用于序列化時(shí)輸出帶有根屬性名稱的JSON串,形式如 {"root_name":{"id":1,"name":"zhangsan"}}。
@JsonAutoDetect指定屬性(反)序列化范圍
@JsonIgnoreType將忽略這個(gè)類型的(反)序列化
@JsonInclude對(duì)空值如何序列化
@JsonPropertyDescriptionjson的schema描述
@JsonUnwrapped將其屬性上拉一個(gè)層級(jí)展開(kāi)
@JsonView不同接口下返回不同的屬性 eg:@JsonView的使用
@JacksonInjectjson字段有一些缺少的屬性,抓換成實(shí)體類的時(shí)候沒(méi)有的屬性將為null,但是我們?cè)谀承┬枨螽?dāng)中需要將為null的屬性都設(shè)置為默認(rèn)
@JsonEnumDefaultValue反序列化時(shí)未知時(shí)的枚舉值
@JsonRawValue使用原始值,而不會(huì)進(jìn)行轉(zhuǎn)義 eg:"content":"Test content",而不是\"content\":\"Test content\"
@JsonValue最多能用于類的一個(gè)屬性(多個(gè)屬性應(yīng)用此注解將拋出異常),并將此屬性上拉一個(gè)層級(jí)展開(kāi),其他字段不參與(反)序列化
@JsonKey最多能用于類的一個(gè)屬性(多個(gè)屬性應(yīng)用此注解將拋出異常),這個(gè)類型對(duì)象作為Map數(shù)據(jù)結(jié)構(gòu)的Key時(shí),標(biāo)記此注解的屬性值將作為json字符串的字段名
@JsonFilter應(yīng)用于屬性, 過(guò)濾屬性 eg:@JsonFilter("non-pwd") private char[] password = new char[]{'0', '\u0343', '&'}; mapper.setFilterProvider(new SimpleFilterProvider().addFilter("non-pwd", SimpleBeanPropertyFilter.serializeAllExcept("password")));
@JsonAlias應(yīng)用于屬性,反序列化時(shí)多個(gè)候選字段名能夠映射到同一個(gè)屬性上
@JsonMerge應(yīng)用于屬性,反序列化時(shí)集合類型屬性時(shí),將Json中的元素與字段中的默認(rèn)元素融合 eg:@JsonMerge private List<String> hobbies = new ArrayList<>(Collections.singletonList("籃球"));

常用注解示例

1、JsonProperty

類似于sql里字段的別名,用于序列化,使用注解字段屬性,替代原字段屬性

@JsonProperty("userName")
private String name;
序列化結(jié)果為:在序列化的json串中,userName替代了name
{"userName":"tom"}

2、JsonIgnore

在序列化時(shí)忽略該字段

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @JsonIgnore
    private Long id;
    @JsonProperty("userName")
    private String name;
    @JsonIgnore
    private Integer age;
    @JsonIgnore
    private Date birthday;
}

序列化結(jié)果為:
{"userName":"tom"}

3、JsonIgnoreProperties

  • 序列化@JsonIgnoreProperties與@JsonIgnore類似,用于類上,注解使用的是字段別名
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties({"id","userName","birthday"})
public class User {
    private Long id;
    @JsonProperty("userName")
    private String name;
    private Integer age;
    private Date birthday;
}

序列化結(jié)果為:
{"age":23}
  • @JsonIgnoreProperties(ignoreUnknown = true)用于忽略字段不匹配情況,相當(dāng)于mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

【@JsonTypeName @JsonTypeInfo】用在類上,在序列化時(shí)增加一層

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonTypeName(value = "user")
@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME)
public class User {
    private Long id;
    @JsonProperty("userName")
    private String name;
    private Integer age;
    private Date birthday;
}

序列化結(jié)果:

{"user":{"id":1,"age":23,"birthday":1587891781603,"userName":"tom"}}

4、JsonRootName

組合在序列化上等于類上注解@JsonRootName(“user”) 和 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE),反序列化無(wú)用;

5、JsonFormat

格式化日期格式

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Long id;
    @JsonProperty("userName")
    private String name;
    private Integer age;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss:SSS",locale = "zh", timezone = "GMT+8")
    private Date birthday;
}
序列化結(jié)果:

{"id":1,"age":23,"birthday":"2020-04-26 17:09:32:818","userName":"tom"}

配置

基礎(chǔ)配置

spring:
  jackson:
    # 設(shè)置屬性命名策略,對(duì)應(yīng)jackson下PropertyNamingStrategy中的常量值,SNAKE_CASE-返回的json駝峰式轉(zhuǎn)下劃線,json body下劃線傳到后端自動(dòng)轉(zhuǎn)駝峰式
    property-naming-strategy: SNAKE_CASE
    # 全局設(shè)置@JsonFormat的格式pattern
    date-format: yyyy-MM-dd HH:mm:ss
    # 當(dāng)?shù)貢r(shí)區(qū)
    locale: zh_CN
    # 設(shè)置全局時(shí)區(qū)
    time-zone: GMT+8
    # 常用,全局設(shè)置pojo或被@JsonInclude注解的屬性的序列化方式
    default-property-inclusion: NON_NULL #不為空的屬性才會(huì)序列化,具體屬性可看JsonInclude.Include
    # 常規(guī)默認(rèn),枚舉類SerializationFeature中的枚舉屬性為key,值為boolean設(shè)置jackson序列化特性,具體key請(qǐng)看SerializationFeature源碼
    visibility:
      #屬性序列化的可見(jiàn)范圍
      getter: non_private
      #屬性反序列化的可見(jiàn)范圍
      setter: protected_and_public
      #靜態(tài)工廠方法的反序列化
      CREATOR: public_only
      #字段
      FIELD: public_only
      #布爾的序列化
      IS_GETTER: public_only
      #所有類型(即getter setter FIELD)不受影響,無(wú)意義
      NONE: public_only
      #所有類型(即getter setter FIELD)都受其影響(慎用)
      ALL: public_only
    serialization:
      #反序列化是否有根節(jié)點(diǎn)
      WRAP_ROOT_VALUE: false
      #是否使用縮進(jìn),格式化輸出
      INDENT_OUTPUT: false
      FAIL_ON_EMPTY_BEANS: true # 對(duì)象不含任何字段時(shí)是否報(bào)錯(cuò),默認(rèn)true
      FAIL_ON_SELF_REFERENCES: true #循環(huán)引用報(bào)錯(cuò)
      WRAP_EXCEPTIONS: true #是否包裝異常
      FAIL_ON_UNWRAPPED_TYPE_IDENTIFIERS: true #JsonUnwrapped標(biāo)記的類有類型信息是否報(bào)錯(cuò)
      WRITE_SELF_REFERENCES_AS_NULL: false #循環(huán)引用返回null
      CLOSE_CLOSEABLE: true #若對(duì)象實(shí)現(xiàn)了CLOSEABLE接口,在序列化后是否調(diào)用Close方法
      FLUSH_AFTER_WRITE_VALUE: false #流對(duì)象序列化之后是否強(qiáng)制刷新
      WRITE_DATES_AS_TIMESTAMPS: true # 返回的java.util.date轉(zhuǎn)換成時(shí)間戳
      WRITE_DATES_WITH_ZONE_ID: true #2011-12-03T10:15:30+01:00[Europe/Paris]帶時(shí)區(qū)id
      WRITE_DURATIONS_AS_TIMESTAMPS: true #將DURATIONS轉(zhuǎn)換成時(shí)間戳
      WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS: false #是否字符數(shù)組輸出json數(shù)組 (false則輸出字符串)
      WRITE_ENUMS_USING_TO_STRING: false # 將枚舉輸出toString
      WRITE_ENUMS_USING_INDEX: false #枚舉下標(biāo)
      WRITE_ENUM_KEYS_USING_INDEX: false #枚舉key類似
      WRITE_NULL_MAP_VALUES: false #是否輸出map中的空entry(此特性已過(guò)期,請(qǐng)使用JsonInclude注解)
      WRITE_EMPTY_JSON_ARRAYS: true # 對(duì)象屬性值是空集合是否輸出空json數(shù)組
      WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED: false #是否將單個(gè)元素的集合展開(kāi),(即:去除數(shù)組符號(hào)"[]")
      WRITE_BIGDECIMAL_AS_PLAIN: false #是否調(diào)用BigDecimal#toPlainString()輸出
      WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS: #將timestamp輸出為納秒
      ORDER_MAP_ENTRIES_BY_KEYS: false #map序列化后,是否用key對(duì)其排序
      EAGER_SERIALIZER_FETCH: true #是否馬上獲取序列化器
      USE_EQUALITY_FOR_OBJECT_ID: false #是否使用objectId比較是否相等(在ORM框架Hibernate中有應(yīng)用)

    # 枚舉類DeserializationFeature中的枚舉屬性為key,值為boolean設(shè)置jackson反序列化特性,具體key請(qǐng)看DeserializationFeature源碼
    deserialization:
      USE_BIG_DECIMAL_FOR_FLOATS: false #將浮點(diǎn)數(shù)反序列化為BIG_DECIMAL
      USE_BIG_INTEGER_FOR_INTS: false #將整數(shù)反序列化為BIG_INTEGER
      USE_LONG_FOR_INTS: false #將整型反序列化為長(zhǎng)整
      USE_JAVA_ARRAY_FOR_JSON_ARRAY: false #無(wú)明確類型時(shí),是否將json數(shù)組反序列化為java數(shù)組(若是true,就對(duì)應(yīng)Object[] ,反之就是List<?>)
      FAIL_ON_UNKNOWN_PROPERTIES: false # 常用,json中含pojo不存在屬性時(shí)是否失敗報(bào)錯(cuò),默認(rèn)true
      FAIL_ON_NULL_FOR_PRIMITIVES: false #將null反序列化為基本數(shù)據(jù)類型是否報(bào)錯(cuò)
      FAIL_ON_NUMBERS_FOR_ENUMS: false #用整數(shù)反序列化為枚舉是否報(bào)錯(cuò)
      FAIL_ON_INVALID_SUBTYPE: false #找不至合適的子類否報(bào)錯(cuò) (如注解JsonTypeInfo指定的子類型)
      FAIL_ON_READING_DUP_TREE_KEY: false #出現(xiàn)重復(fù)的json字段是否報(bào)錯(cuò)
      FAIL_ON_IGNORED_PROPERTIES: false #如果json中出現(xiàn)了java實(shí)體字段中已顯式標(biāo)記應(yīng)當(dāng)忽略的字段,是否報(bào)錯(cuò)
      FAIL_ON_UNRESOLVED_OBJECT_IDS: true #如果反序列化發(fā)生了不可解析的ObjectId是否報(bào)錯(cuò)
      FAIL_ON_MISSING_CREATOR_PROPERTIES: false #如果缺少靜態(tài)工廠方法的參數(shù)是否報(bào)錯(cuò)(false,則使用null代替需要的參數(shù))
      FAIL_ON_NULL_CREATOR_PROPERTIES: false #將空值綁定到構(gòu)造方法或靜態(tài)工廠方法的參數(shù)是否報(bào)錯(cuò)
      FAIL_ON_MISSING_EXTERNAL_TYPE_ID_PROPERTY: false #注解JsonTypeInfo.As#EXTERNAL_PROPERTY標(biāo)記的屬性缺失,是否報(bào)錯(cuò)
      FAIL_ON_TRAILING_TOKENS: false #出現(xiàn)尾隨令牌是否報(bào)錯(cuò)(如果是true,則調(diào)用JsonParser#nextToken,檢查json的完整性)
      WRAP_EXCEPTIONS: true #是否包裝反序列化出現(xiàn)的異常
      ACCEPT_SINGLE_VALUE_AS_ARRAY: true #反序列化時(shí)是否將一個(gè)對(duì)象封裝成單元素?cái)?shù)組
      UNWRAP_SINGLE_VALUE_ARRAYS: false #反序列化時(shí)是否將單元素?cái)?shù)組展開(kāi)為一個(gè)對(duì)象
      UNWRAP_ROOT_VALUE: false #是否將取消根節(jié)點(diǎn)的包裝
      ACCEPT_EMPTY_STRING_AS_NULL_OBJECT: false #是否將空字符("")串當(dāng)作null對(duì)象
      ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT: false #是否接受將空數(shù)組("[]")作為null
      ACCEPT_FLOAT_AS_INT: true #是否接受將浮點(diǎn)數(shù)作為整數(shù)
      READ_ENUMS_USING_TO_STRING: false #按照枚舉toString()方法讀取,(false則按枚舉的name()方法讀?。?
      READ_UNKNOWN_ENUM_VALUES_AS_NULL: false #讀取到未知的枚舉當(dāng)作null
      READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE: false #讀取到未知的枚舉,將其當(dāng)作被JsonEnumDefaultValue注解標(biāo)記的枚舉
      READ_DATE_TIMESTAMPS_AS_NANOSECONDS: true #將時(shí)間戳視為納秒(false,則視為毫秒)
      ADJUST_DATES_TO_CONTEXT_TIME_ZONE: true #反序列化是否會(huì)適應(yīng)DeserializationContext#getTimeZone()提供的時(shí)區(qū) (此特性僅對(duì)java8的時(shí)間/日期有效)
      EAGER_DESERIALIZER_FETCH: true  #是否馬上獲取反序列化器
    # 枚舉類MapperFeature中的枚舉屬性為key,值為boolean設(shè)置jackson ObjectMapper特性
    # ObjectMapper在jackson中負(fù)責(zé)json的讀寫(xiě)、json與pojo的互轉(zhuǎn)、json tree的互轉(zhuǎn),具體特性請(qǐng)看MapperFeature,常規(guī)默認(rèn)即可
    mapper:
      USE_ANNOTATIONS: true #是否使用注解自省(檢查JsonProperties這些)
      # 使用getter取代setter探測(cè)屬性,這是針對(duì)集合類型,可以直接修改集合的屬性
      USE_GETTERS_AS_SETTERS: true #默認(rèn)false
      PROPAGATE_TRANSIENT_MARKER: false #如何處理transient字段,如果true(不能訪問(wèn)此屬性) ,若是false則不能通過(guò)字段訪問(wèn)(還是可以使用getter和setter訪問(wèn))
      AUTO_DETECT_CREATORS: true #是否自動(dòng)檢測(cè)構(gòu)造方法或單參且名為valueOf的靜態(tài)工廠方法
      AUTO_DETECT_FIELDS: true #是否自動(dòng)檢測(cè)字段 (若true,則將所有public實(shí)例字段視為為屬性)
      AUTO_DETECT_GETTERS: true #確定是否根據(jù)標(biāo)準(zhǔn) Bean 命名約定自動(dòng)檢測(cè)常規(guī)“getter”方法的(不包括is getter)
      AUTO_DETECT_IS_GETTERS: true #確定是否根據(jù)標(biāo)準(zhǔn) Bean 命名約定自動(dòng)檢測(cè)“is getter”方法
      AUTO_DETECT_SETTERS: false # 確定是否根據(jù)標(biāo)準(zhǔn) Bean 命名約定自動(dòng)檢測(cè)“setter”方法
      REQUIRE_SETTERS_FOR_GETTERS: false #getter方法必需要有對(duì)應(yīng)的setter或字段或構(gòu)造方法參數(shù),才能視為一個(gè)屬性
      ALLOW_FINAL_FIELDS_AS_MUTATORS: true #是否可以修改final成員字段
      INFER_PROPERTY_MUTATORS: true #是否能推斷屬性,(即使用字段和setter是不可見(jiàn)的,但getter可見(jiàn)即可推斷屬性)
      INFER_CREATOR_FROM_CONSTRUCTOR_PROPERTIES: true #是否自動(dòng)推斷ConstructorProperties注解
      CAN_OVERRIDE_ACCESS_MODIFIERS: true #調(diào)用AccessibleObject#setAccessible設(shè)為true .將原來(lái)不可見(jiàn)的屬性,變?yōu)榭梢?jiàn)
      OVERRIDE_PUBLIC_ACCESS_MODIFIERS: true #對(duì)所有的屬性調(diào)用AccessibleObject#setAccessible設(shè)為true .(即使用是公共的)
      USE_STATIC_TYPING: false #序列化使用聲明的靜態(tài)類型還是動(dòng)態(tài)類型  JsonSerialize#typing注解可覆蓋它
      USE_BASE_TYPE_AS_DEFAULT_IMPL: false # 反序列化是否使用基本類作為默實(shí)現(xiàn) @JsonTypeInfo.defaultImpl
      DEFAULT_VIEW_INCLUSION: true #沒(méi)有JsonView注解標(biāo)記的屬性是否會(huì)被包含在json序列化視圖中
      SORT_PROPERTIES_ALPHABETICALLY: false #按字母表順序序列化字段(若false,按字段聲明的順序)
      ACCEPT_CASE_INSENSITIVE_PROPERTIES: false #反序列化屬性時(shí)不區(qū)分大小寫(xiě) (true時(shí),會(huì)影響性能)
      ACCEPT_CASE_INSENSITIVE_ENUMS: false #枚舉反序列化不區(qū)別大小寫(xiě)
      ACCEPT_CASE_INSENSITIVE_VALUES: false #允許解析一些枚舉的基于文本的值類型但忽略反序列化值的大小寫(xiě) 如日期/時(shí)間類型反序列化器
      USE_WRAPPER_NAME_AS_PROPERTY_NAME: false # 使用包裝器名稱覆蓋屬性名稱 AnnotationIntrospector#findWrapperName指定的
      USE_STD_BEAN_NAMING: false # 是否以強(qiáng)制與 Bean 名稱自省嚴(yán)格兼容的功能,若開(kāi)啟后(getURL())變成URL (jackson默認(rèn)false, url)
      ALLOW_EXPLICIT_PROPERTY_RENAMING: false #是否允許JsonProperty注解覆蓋PropertyNamingStrategy
      ALLOW_COERCION_OF_SCALARS: true # 是否允許強(qiáng)制使用文本標(biāo)題 ,即將字符串的"true"當(dāng)作布爾的true ,字符串的"1.0"當(dāng)作"double"
      IGNORE_DUPLICATE_MODULE_REGISTRATIONS: true #如果模塊相同(Module#getTypeId()返回值相同),只有第一次能會(huì)真正調(diào)用注冊(cè)方法
      IGNORE_MERGE_FOR_UNMERGEABLE: true #在合并不能合并的屬性時(shí)是否忽略錯(cuò)誤
      BLOCK_UNSAFE_POLYMORPHIC_BASE_TYPES: false #阻止不安全的基類(如Object Closeable Cloneable AutoCloseable Serializable)
    parser:
      AUTO_CLOSE_SOURCE: true #是否自動(dòng)關(guān)閉不屬于解析器的底層輸入流
      ALLOW_COMMENTS: false #是否允許json注解(Json規(guī)范是不能加注釋的,但這里可以配置)
      ALLOW_YAML_COMMENTS: false #是否允許出現(xiàn)yaml注釋
      ALLOW_UNQUOTED_FIELD_NAMES: false #是否允許出現(xiàn)字段名不帶引號(hào)
      ALLOW_SINGLE_QUOTES: false # 是否允許出現(xiàn)單引號(hào),默認(rèn)false
      ALLOW_UNQUOTED_CONTROL_CHARS: false #是否允許出現(xiàn)未加轉(zhuǎn)義的控制字符
      ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER: false #是否允許對(duì)所有字符都可加反斜杠轉(zhuǎn)義
      ALLOW_NUMERIC_LEADING_ZEROS: false #是否允許前導(dǎo)的零 000001
      ALLOW_LEADING_DECIMAL_POINT_FOR_NUMBERS: false #是否允許前導(dǎo)的小點(diǎn)數(shù) 如 ".04314"會(huì)被解析成"0.04314"
      ALLOW_NON_NUMERIC_NUMBERS: false #是否允許NaN型的浮點(diǎn)數(shù) ("INF"當(dāng)作正無(wú)窮  "-INF"當(dāng)作負(fù)無(wú)窮 "NaN"非數(shù)字,類型于除數(shù)為0)
      ALLOW_MISSING_VALUES: false # 是否允許json數(shù)組中出現(xiàn)缺失值 (如["value1",,"value3",]將被反序列化為["value1", null, "value3", null])
      ALLOW_TRAILING_COMMA: false # 是否允許json尾部有逗號(hào) (如{"a": true,})
      STRICT_DUPLICATE_DETECTION: false #是否啟用嚴(yán)格的字段名重復(fù)檢查(開(kāi)啟后會(huì)增加20-30%左右的性能開(kāi)銷)
      IGNORE_UNDEFINED: false #屬性定義未找到是否報(bào)錯(cuò)(這不是針對(duì)json,是針對(duì)Avro, protobuf等需要Schema的格式)
      INCLUDE_SOURCE_IN_LOCATION: false #是否包含其源信息(如總字節(jié)數(shù),總字符數(shù) 行號(hào) 列號(hào) )
    generator:
      AUTO_CLOSE_TARGET: true #是否自動(dòng)關(guān)閉不屬于生成器的底層輸出流
      AUTO_CLOSE_JSON_CONTENT: true #是否自動(dòng)補(bǔ)全json(當(dāng)有不匹配的JsonToken#START_ARRAY JsonToken#START_OBJECT時(shí))
      FLUSH_PASSED_TO_STREAM: true #是否刷新generator
      QUOTE_FIELD_NAMES: true #是否為字段名添加引號(hào)
      QUOTE_NON_NUMERIC_NUMBERS: true #對(duì)于NaN浮點(diǎn)數(shù)是否加引號(hào)
      ESCAPE_NON_ASCII: false #非ASCII碼是否需要轉(zhuǎn)義
      WRITE_NUMBERS_AS_STRINGS: false #將數(shù)字當(dāng)作字符串輸出 (防止Javascript長(zhǎng)度限制被截?cái)啵?
      WRITE_BIGDECIMAL_AS_PLAIN: false #按BigDecimal的toPlainString()輸出
      STRICT_DUPLICATE_DETECTION: false #是否啟用嚴(yán)格的字段名重復(fù)檢查
      IGNORE_UNKNOWN: false #屬性定義未找到是否報(bào)錯(cuò)(這不是針對(duì)json,是針對(duì)Avro, protobuf等需要Schema的格式)

常用配置

spring:
  jackson:
    #時(shí)間格式化
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    #設(shè)置空如何序列化
    default-property-inclusion: non_null    
    serialization:
       #格式化輸出 
      indent_output: true
      #忽略無(wú)法轉(zhuǎn)換的對(duì)象
      fail_on_empty_beans: false
    deserialization:
      #允許對(duì)象忽略json中不存在的屬性
      fail_on_unknown_properties: false
    parser:
      #允許出現(xiàn)特殊字符和轉(zhuǎn)義符
      allow_unquoted_control_chars: true
      #允許出現(xiàn)單引號(hào)
      allow_single_quotes: true

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • maven項(xiàng)目中<scope>provided</scope>的作用及說(shuō)明

    maven項(xiàng)目中<scope>provided</scope>的作用及說(shuō)明

    這篇文章主要介紹了maven項(xiàng)目中<scope>provided</scope>的作用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • spring初始化方法的執(zhí)行順序及其原理分析

    spring初始化方法的執(zhí)行順序及其原理分析

    這篇文章主要介紹了spring初始化方法的執(zhí)行順序及其原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot @value注解動(dòng)態(tài)刷新問(wèn)題小結(jié)

    SpringBoot @value注解動(dòng)態(tài)刷新問(wèn)題小結(jié)

    @Value注解 所對(duì)應(yīng)的數(shù)據(jù)源來(lái)自項(xiàng)目的 Environment 中,我們可以將數(shù)據(jù)庫(kù)或其他文件中的數(shù)據(jù),加載到項(xiàng)目的 Environment 中,然后 @Value注解 就可以動(dòng)態(tài)獲取到配置信息了,這篇文章主要介紹了SpringBoot @value注解動(dòng)態(tài)刷新,需要的朋友可以參考下
    2023-09-09
  • Java中ArrayList和SubList的坑面試題

    Java中ArrayList和SubList的坑面試題

    集合是Java開(kāi)發(fā)日常開(kāi)發(fā)中經(jīng)常會(huì)使用到的,下面這篇文章主要給大家介紹了關(guān)于Java中ArrayList和SubList的坑面試題,需要的朋友可以參考下
    2022-05-05
  • Spring自動(dòng)配置之condition條件判斷下篇

    Spring自動(dòng)配置之condition條件判斷下篇

    這篇文章主要為大家介紹了SpringBoot?condition條件判斷功能的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • java與C 代碼運(yùn)行效率的對(duì)比(整理)

    java與C 代碼運(yùn)行效率的對(duì)比(整理)

    最近和朋友無(wú)意間討論起了 有關(guān)java 和C 的 效率問(wèn)題, (我是java 推介者, 他是 c 語(yǔ)言推介者, 他做的是嵌入式)故,想通過(guò)網(wǎng)絡(luò)查詢一下, 總結(jié)一下,兩者到底效率如何,其有何差異,原因又是啥?各種優(yōu)勢(shì)有在何處?
    2021-04-04
  • SpringBoot項(xiàng)目在啟動(dòng)后自動(dòng)關(guān)閉的實(shí)現(xiàn)

    SpringBoot項(xiàng)目在啟動(dòng)后自動(dòng)關(guān)閉的實(shí)現(xiàn)

    我們?cè)趯?xiě)spring?boot?web項(xiàng)目時(shí),有時(shí)會(huì)遇到啟動(dòng)后立即關(guān)閉的情況,?本文主要介紹了SpringBoot項(xiàng)目在啟動(dòng)后自動(dòng)關(guān)閉的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 詳解Spring?Security?捕獲?filter?層面異常返回我們自定義的內(nèi)容

    詳解Spring?Security?捕獲?filter?層面異常返回我們自定義的內(nèi)容

    Spring?的異常會(huì)轉(zhuǎn)發(fā)到?BasicErrorController?中進(jìn)行異常寫(xiě)入,然后才會(huì)返回客戶端。所以,我們可以在?BasicErrorController?對(duì)?filter異常進(jìn)行捕獲并處理,下面通過(guò)本文給大家介紹Spring?Security?捕獲?filter?層面異常,返回我們自定義的內(nèi)容,感興趣的朋友一起看看吧
    2022-05-05
  • 詳解Java并發(fā)包中線程池ThreadPoolExecutor

    詳解Java并發(fā)包中線程池ThreadPoolExecutor

    ThreadPoolExecutor是Java語(yǔ)言對(duì)于線程池的實(shí)現(xiàn)。線程池技術(shù)使線程在使用完畢后不回收而是重復(fù)利用。如果線程能夠復(fù)用,那么我們就可以使用固定數(shù)量的線程來(lái)解決并發(fā)問(wèn)題,這樣一來(lái)不僅節(jié)約了系統(tǒng)資源,而且也會(huì)減少線程上下文切換的開(kāi)銷
    2021-06-06
  • java生成驗(yàn)證碼圖片的方法

    java生成驗(yàn)證碼圖片的方法

    這篇文章主要為大家詳細(xì)介紹了java生成驗(yàn)證碼圖片的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02

最新評(píng)論