广告位联系
返回顶部
分享到

SpringBoot使用Jackson介绍

java 来源:互联网 作者:佚名 发布时间:2025-02-14 21:05:05 人浏览
摘要

概述 Springboot配置JackSon处理类属性,JavaBean序列化为JSON格式,常用框架:阿里fastjson,谷歌gson、Jackson等。 ① 性能:Jackson Fastjson Gson 同个结构 ② Jackson、Fastjson、Gson 类库各有特点,各有自己的

概述

Springboot配置JackSon处理类属性,JavaBean序列化为JSON格式,常用框架:阿里fastjson,谷歌gson、Jackson等。

  • ① 性能:Jackson > Fastjson > Gson >同个结构
  • ② Jackson、Fastjson、Gson 类库各有特点,各有自己的专长

Jackson是spring-boot-starter-json依赖的一部分,spring-boot-starter-web中包含spring-boot-starter-json。也就是说当项目中引入了

spring-boot-starter-web后会自动引入spring-boot-starter-json,而不需要单独引入。

常用注解

基础注解

注解 用法
@JsonProperty 用于属性,把属性的名称序列化时转换为另外一个名称。示例:@JsonProperty("birth_date") private Date birthDate
@JsonIgnore 可用于字段、getter/setter、构造函数参数上,作用相同,都会对相应的字段产生影响。使相应字段不参与序列化和反序列化。
@JsonIgnoreProperties 该注解是类注解,使得相应字段不参与序列化和反序列化。eg:@JsonIgnoreProperties({"password","id"}) public class Person
@JsonFormat 用于属性或者方法,把属性的格式序列化时转换成指定的格式。示例:@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm") public Date getBirthDate()
@JsonPropertyOrder 该注解是类注解,和 @JsonProperty的index属性类似,指定属性在序列化时 json 中的顺序 , 示例:@JsonPropertyOrder({ "birth_Date", "name" }) public class Person
@JsonCreator 用于构造方法,和 @JsonProperty 配合使用,适用有参数的构造方法。示例:@JsonCreator public Person(@JsonProperty("name")String name) {…}
@JsonAnySetter 用于属性或者方法,设置未反序列化的属性名和值作为键值存储到 map 中 @JsonAnySetter public void set(String key, Object value) { map.put(key, value); }
@JsonAnyGetter 应用于属性或方法,获取所有未序列化的属性 public Map<String, Object> any() { return map; }
@JsonSetter 应用于属性或方法,指定反序列化的字段名 @JsonSetter("_id") public String setId(String id) { return this.id=id; }
@JsonGetter 应用于方法或字段,指定序列化的字段名 @JsonGetter("_id") public String getId() { return id; }
@JsonNaming 类注解。序列化的时候该注解可将驼峰命名的字段名转换为下划线分隔的小写字母命名方式。反序列化的时候可以将下划线分隔的小写字母转换为驼峰命名的字段名。示例:@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
@JsonRootName 类注解。需开启mapper.enable(SerializationFeature.WRAP_ROOT_VALUE),用于序列化时输出带有根属性名称的JSON串,形式如 {"root_name":{"id":1,"name":"zhangsan"}}。
@JsonAutoDetect 指定属性(反)序列化范围
@JsonIgnoreType 将忽略这个类型的(反)序列化
@JsonInclude 对空值如何序列化
@JsonPropertyDescription json的schema描述
@JsonUnwrapped 将其属性上拉一个层级展开
@JsonView 不同接口下返回不同的属性 eg:@JsonView的使用
@JacksonInject json字段有一些缺少的属性,抓换成实体类的时候没有的属性将为null,但是我们在某些需求当中需要将为null的属性都设置为默认
@JsonEnumDefaultValue 反序列化时未知时的枚举值
@JsonRawValue 使用原始值,而不会进行转义 eg:"content":"Test content",而不是\"content\":\"Test content\"
@JsonValue 最多能用于类的一个属性(多个属性应用此注解将抛出异常),并将此属性上拉一个层级展开,其他字段不参与(反)序列化
@JsonKey 最多能用于类的一个属性(多个属性应用此注解将抛出异常),这个类型对象作为Map数据结构的Key时,标记此注解的属性值将作为json字符串的字段名
@JsonFilter 应用于属性, 过滤属性 eg:@JsonFilter("non-pwd") private char[] password = new char[]{'0', '\u0343', '&'}; mapper.setFilterProvider(new SimpleFilterProvider().addFilter("non-pwd", SimpleBeanPropertyFilter.serializeAllExcept("password")));
@JsonAlias 应用于属性,反序列化时多个候选字段名能够映射到同一个属性上
@JsonMerge 应用于属性,反序列化时集合类型属性时,将Json中的元素与字段中的默认元素融合 eg:@JsonMerge private List<String> hobbies = new ArrayList<>(Collections.singletonList("篮球"));

常用注解示例

1、JsonProperty

类似于sql里字段的别名,用于序列化,使用注解字段属性,替代原字段属性

1

2

3

4

@JsonProperty("userName")

private String name;

序列化结果为:在序列化的json串中,userName替代了name

{"userName":"tom"}

2、JsonIgnore

在序列化时忽略该字段

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

@Data

@Builder

@NoArgsConstructor

@AllArgsConstructor

public class User {

    @JsonIgnore

    private Long id;

    @JsonProperty("userName")

    private String name;

    @JsonIgnore

    private Integer age;

    @JsonIgnore

    private Date birthday;

}

 

序列化结果为:

{"userName":"tom"}

3、JsonIgnoreProperties

  • 序列化@JsonIgnoreProperties与@JsonIgnore类似,用于类上,注解使用的是字段别名

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

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;

}

 

序列化结果为:

{"age":23}

  • @JsonIgnoreProperties(ignoreUnknown = true)用于忽略字段不匹配情况,相当于mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

【@JsonTypeName @JsonTypeInfo】用在类上,在序列化时增加一层

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

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;

}

 

序列化结果:

 

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

4、JsonRootName

组合在序列化上等于类上注解@JsonRootName(“user”) 和 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE),反序列化无用;

5、JsonFormat

格式化日期格式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

@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;

}

序列化结果:

 

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

配置

基础配置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

spring:

  jackson:

    # 设置属性命名策略,对应jackson下PropertyNamingStrategy中的常量值,SNAKE_CASE-返回的json驼峰式转下划线,json body下划线传到后端自动转驼峰式

    property-naming-strategy: SNAKE_CASE

    # 全局设置@JsonFormat的格式pattern

    date-format: yyyy-MM-dd HH:mm:ss

    # 当地时区

    locale: zh_CN

    # 设置全局时区

    time-zone: GMT+8

    # 常用,全局设置pojo或被@JsonInclude注解的属性的序列化方式

    default-property-inclusion: NON_NULL #不为空的属性才会序列化,具体属性可看JsonInclude.Include

    # 常规默认,枚举类SerializationFeature中的枚举属性为key,值为boolean设置jackson序列化特性,具体key请看SerializationFeature源码

    visibility:

      #属性序列化的可见范围

      getter: non_private

      #属性反序列化的可见范围

      setter: protected_and_public

      #静态工厂方法的反序列化

      CREATOR: public_only

      #字段

      FIELD: public_only

      #布尔的序列化

      IS_GETTER: public_only

      #所有类型(即getter setter FIELD)不受影响,无意义

      NONE: public_only

      #所有类型(即getter setter FIELD)都受其影响(慎用)

      ALL: public_only

    serialization:

      #反序列化是否有根节点

      WRAP_ROOT_VALUE: false

      #是否使用缩进,格式化输出

      INDENT_OUTPUT: false

      FAIL_ON_EMPTY_BEANS: true # 对象不含任何字段时是否报错,默认true

      FAIL_ON_SELF_REFERENCES: true #循环引用报错

      WRAP_EXCEPTIONS: true #是否包装异常

      FAIL_ON_UNWRAPPED_TYPE_IDENTIFIERS: true #JsonUnwrapped标记的类有类型信息是否报错

      WRITE_SELF_REFERENCES_AS_NULL: false #循环引用返回null

      CLOSE_CLOSEABLE: true #若对象实现了CLOSEABLE接口,在序列化后是否调用Close方法

      FLUSH_AFTER_WRITE_VALUE: false #流对象序列化之后是否强制刷新

      WRITE_DATES_AS_TIMESTAMPS: true # 返回的java.util.date转换成时间戳

      WRITE_DATES_WITH_ZONE_ID: true #2011-12-03T10:15:30+01:00[Europe/Paris]带时区id

      WRITE_DURATIONS_AS_TIMESTAMPS: true #将DURATIONS转换成时间戳

      WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS: false #是否字符数组输出json数组 (false则输出字符串)

      WRITE_ENUMS_USING_TO_STRING: false # 将枚举输出toString

      WRITE_ENUMS_USING_INDEX: false #枚举下标

      WRITE_ENUM_KEYS_USING_INDEX: false #枚举key类似

      WRITE_NULL_MAP_VALUES: false #是否输出map中的空entry(此特性已过期,请使用JsonInclude注解)

      WRITE_EMPTY_JSON_ARRAYS: true # 对象属性值是空集合是否输出空json数组

      WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED: false #是否将单个元素的集合展开,(即:去除数组符号"[]")

      WRITE_BIGDECIMAL_AS_PLAIN: false #是否调用BigDecimal#toPlainString()输出

      WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS: #将timestamp输出为纳秒

      ORDER_MAP_ENTRIES_BY_KEYS: false #map序列化后,是否用key对其排序

      EAGER_SERIALIZER_FETCH: true #是否马上获取序列化器

      USE_EQUALITY_FOR_OBJECT_ID: false #是否使用objectId比较是否相等(在ORM框架Hibernate中有应用)

 

    # 枚举类DeserializationFeature中的枚举属性为key,值为boolean设置jackson反序列化特性,具体key请看DeserializationFeature源码

    deserialization:

      USE_BIG_DECIMAL_FOR_FLOATS: false #将浮点数反序列化为BIG_DECIMAL

      USE_BIG_INTEGER_FOR_INTS: false #将整数反序列化为BIG_INTEGER

      USE_LONG_FOR_INTS: false #将整型反序列化为长整

      USE_JAVA_ARRAY_FOR_JSON_ARRAY: false #无明确类型时,是否将json数组反序列化为java数组(若是true,就对应Object[] ,反之就是List<?>)

      FAIL_ON_UNKNOWN_PROPERTIES: false # 常用,json中含pojo不存在属性时是否失败报错,默认true

      FAIL_ON_NULL_FOR_PRIMITIVES: false #将null反序列化为基本数据类型是否报错

      FAIL_ON_NUMBERS_FOR_ENUMS: false #用整数反序列化为枚举是否报错

      FAIL_ON_INVALID_SUBTYPE: false #找不至合适的子类否报错 (如注解JsonTypeInfo指定的子类型)

      FAIL_ON_READING_DUP_TREE_KEY: false #出现重复的json字段是否报错

      FAIL_ON_IGNORED_PROPERTIES: false #如果json中出现了java实体字段中已显式标记应当忽略的字段,是否报错

      FAIL_ON_UNRESOLVED_OBJECT_IDS: true #如果反序列化发生了不可解析的ObjectId是否报错

      FAIL_ON_MISSING_CREATOR_PROPERTIES: false #如果缺少静态工厂方法的参数是否报错(false,则使用null代替需要的参数)

      FAIL_ON_NULL_CREATOR_PROPERTIES: false #将空值绑定到构造方法或静态工厂方法的参数是否报错

      FAIL_ON_MISSING_EXTERNAL_TYPE_ID_PROPERTY: false #注解JsonTypeInfo.As#EXTERNAL_PROPERTY标记的属性缺失,是否报错

      FAIL_ON_TRAILING_TOKENS: false #出现尾随令牌是否报错(如果是true,则调用JsonParser#nextToken,检查json的完整性)

      WRAP_EXCEPTIONS: true #是否包装反序列化出现的异常

      ACCEPT_SINGLE_VALUE_AS_ARRAY: true #反序列化时是否将一个对象封装成单元素数组

      UNWRAP_SINGLE_VALUE_ARRAYS: false #反序列化时是否将单元素数组展开为一个对象

      UNWRAP_ROOT_VALUE: false #是否将取消根节点的包装

      ACCEPT_EMPTY_STRING_AS_NULL_OBJECT: false #是否将空字符("")串当作null对象

      ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT: false #是否接受将空数组("[]")作为null

      ACCEPT_FLOAT_AS_INT: true #是否接受将浮点数作为整数

      READ_ENUMS_USING_TO_STRING: false #按照枚举toString()方法读取,(false则按枚举的name()方法读取)

      READ_UNKNOWN_ENUM_VALUES_AS_NULL: false #读取到未知的枚举当作null

      READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE: false #读取到未知的枚举,将其当作被JsonEnumDefaultValue注解标记的枚举

      READ_DATE_TIMESTAMPS_AS_NANOSECONDS: true #将时间戳视为纳秒(false,则视为毫秒)

      ADJUST_DATES_TO_CONTEXT_TIME_ZONE: true #反序列化是否会适应DeserializationContext#getTimeZone()提供的时区 (此特性仅对java8的时间/日期有效)

      EAGER_DESERIALIZER_FETCH: true  #是否马上获取反序列化器

    # 枚举类MapperFeature中的枚举属性为key,值为boolean设置jackson ObjectMapper特性

    # ObjectMapper在jackson中负责json的读写、json与pojo的互转、json tree的互转,具体特性请看MapperFeature,常规默认即可

    mapper:

      USE_ANNOTATIONS: true #是否使用注解自省(检查JsonProperties这些)

      # 使用getter取代setter探测属性,这是针对集合类型,可以直接修改集合的属性

      USE_GETTERS_AS_SETTERS: true #默认false

      PROPAGATE_TRANSIENT_MARKER: false #如何处理transient字段,如果true(不能访问此属性) ,若是false则不能通过字段访问(还是可以使用getter和setter访问)

      AUTO_DETECT_CREATORS: true #是否自动检测构造方法或单参且名为valueOf的静态工厂方法

      AUTO_DETECT_FIELDS: true #是否自动检测字段 (若true,则将所有public实例字段视为为属性)

      AUTO_DETECT_GETTERS: true #确定是否根据标准 Bean 命名约定自动检测常规“getter”方法的(不包括is getter)

      AUTO_DETECT_IS_GETTERS: true #确定是否根据标准 Bean 命名约定自动检测“is getter”方法

      AUTO_DETECT_SETTERS: false # 确定是否根据标准 Bean 命名约定自动检测“setter”方法

      REQUIRE_SETTERS_FOR_GETTERS: false #getter方法必需要有对应的setter或字段或构造方法参数,才能视为一个属性

      ALLOW_FINAL_FIELDS_AS_MUTATORS: true #是否可以修改final成员字段

      INFER_PROPERTY_MUTATORS: true #是否能推断属性,(即使用字段和setter是不可见的,但getter可见即可推断属性)

      INFER_CREATOR_FROM_CONSTRUCTOR_PROPERTIES: true #是否自动推断ConstructorProperties注解

      CAN_OVERRIDE_ACCESS_MODIFIERS: true #调用AccessibleObject#setAccessible设为true .将原来不可见的属性,变为可见

      OVERRIDE_PUBLIC_ACCESS_MODIFIERS: true #对所有的属性调用AccessibleObject#setAccessible设为true .(即使用是公共的)

      USE_STATIC_TYPING: false #序列化使用声明的静态类型还是动态类型  JsonSerialize#typing注解可覆盖它

      USE_BASE_TYPE_AS_DEFAULT_IMPL: false # 反序列化是否使用基本类作为默实现 @JsonTypeInfo.defaultImpl

      DEFAULT_VIEW_INCLUSION: true #没有JsonView注解标记的属性是否会被包含在json序列化视图中

      SORT_PROPERTIES_ALPHABETICALLY: false #按字母表顺序序列化字段(若false,按字段声明的顺序)

      ACCEPT_CASE_INSENSITIVE_PROPERTIES: false #反序列化属性时不区分大小写 (true时,会影响性能)

      ACCEPT_CASE_INSENSITIVE_ENUMS: false #枚举反序列化不区别大小写

      ACCEPT_CASE_INSENSITIVE_VALUES: false #允许解析一些枚举的基于文本的值类型但忽略反序列化值的大小写 如日期/时间类型反序列化器

      USE_WRAPPER_NAME_AS_PROPERTY_NAME: false # 使用包装器名称覆盖属性名称 AnnotationIntrospector#findWrapperName指定的

      USE_STD_BEAN_NAMING: false # 是否以强制与 Bean 名称自省严格兼容的功能,若开启后(getURL())变成URL (jackson默认false, url)

      ALLOW_EXPLICIT_PROPERTY_RENAMING: false #是否允许JsonProperty注解覆盖PropertyNamingStrategy

      ALLOW_COERCION_OF_SCALARS: true # 是否允许强制使用文本标题 ,即将字符串的"true"当作布尔的true ,字符串的"1.0"当作"double"

      IGNORE_DUPLICATE_MODULE_REGISTRATIONS: true #如果模块相同(Module#getTypeId()返回值相同),只有第一次能会真正调用注册方法

      IGNORE_MERGE_FOR_UNMERGEABLE: true #在合并不能合并的属性时是否忽略错误

      BLOCK_UNSAFE_POLYMORPHIC_BASE_TYPES: false #阻止不安全的基类(如Object Closeable Cloneable AutoCloseable Serializable)

    parser:

      AUTO_CLOSE_SOURCE: true #是否自动关闭不属于解析器的底层输入流

      ALLOW_COMMENTS: false #是否允许json注解(Json规范是不能加注释的,但这里可以配置)

      ALLOW_YAML_COMMENTS: false #是否允许出现yaml注释

      ALLOW_UNQUOTED_FIELD_NAMES: false #是否允许出现字段名不带引号

      ALLOW_SINGLE_QUOTES: false # 是否允许出现单引号,默认false

      ALLOW_UNQUOTED_CONTROL_CHARS: false #是否允许出现未加转义的控制字符

      ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER: false #是否允许对所有字符都可加反斜杠转义

      ALLOW_NUMERIC_LEADING_ZEROS: false #是否允许前导的零 000001

      ALLOW_LEADING_DECIMAL_POINT_FOR_NUMBERS: false #是否允许前导的小点数 如 ".04314"会被解析成"0.04314"

      ALLOW_NON_NUMERIC_NUMBERS: false #是否允许NaN型的浮点数 ("INF"当作正无穷  "-INF"当作负无穷 "NaN"非数字,类型于除数为0)

      ALLOW_MISSING_VALUES: false # 是否允许json数组中出现缺失值 (如["value1",,"value3",]将被反序列化为["value1", null, "value3", null])

      ALLOW_TRAILING_COMMA: false # 是否允许json尾部有逗号 (如{"a": true,})

      STRICT_DUPLICATE_DETECTION: false #是否启用严格的字段名重复检查(开启后会增加20-30%左右的性能开销)

      IGNORE_UNDEFINED: false #属性定义未找到是否报错(这不是针对json,是针对Avro, protobuf等需要Schema的格式)

      INCLUDE_SOURCE_IN_LOCATION: false #是否包含其源信息(如总字节数,总字符数 行号 列号 )

    generator:

      AUTO_CLOSE_TARGET: true #是否自动关闭不属于生成器的底层输出流

      AUTO_CLOSE_JSON_CONTENT: true #是否自动补全json(当有不匹配的JsonToken#START_ARRAY JsonToken#START_OBJECT时)

      FLUSH_PASSED_TO_STREAM: true #是否刷新generator

      QUOTE_FIELD_NAMES: true #是否为字段名添加引号

      QUOTE_NON_NUMERIC_NUMBERS: true #对于NaN浮点数是否加引号

      ESCAPE_NON_ASCII: false #非ASCII码是否需要转义

      WRITE_NUMBERS_AS_STRINGS: false #将数字当作字符串输出 (防止Javascript长度限制被截断)

      WRITE_BIGDECIMAL_AS_PLAIN: false #按BigDecimal的toPlainString()输出

      STRICT_DUPLICATE_DETECTION: false #是否启用严格的字段名重复检查

      IGNORE_UNKNOWN: false #属性定义未找到是否报错(这不是针对json,是针对Avro, protobuf等需要Schema的格式)

常用配置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

spring:

  jackson:

    #时间格式化

    date-format: yyyy-MM-dd HH:mm:ss

    time-zone: GMT+8

    #设置空如何序列化

    default-property-inclusion: non_null   

    serialization:

       #格式化输出

      indent_output: true

      #忽略无法转换的对象

      fail_on_empty_beans: false

    deserialization:

      #允许对象忽略json中不存在的属性

      fail_on_unknown_properties: false

    parser:

      #允许出现特殊字符和转义符

      allow_unquoted_control_chars: true

      #允许出现单引号

      allow_single_quotes: true


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 阿里巴巴TransmittableThreadLocal使用介绍
    ThreadLocal在上下文的数据传输上非常的方便和简洁。 工业实践中,比较常用的有三个,ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal,那
  • SpringBoot使用Jackson介绍
    概述 Springboot配置JackSon处理类属性,JavaBean序列化为JSON格式,常用框架:阿里fastjson,谷歌gson、Jackson等。 ① 性能:Jackson Fastjson Gson 同个结
  • springboot结合JWT实现单点登录的代码

    springboot结合JWT实现单点登录的代码
    JWT实现单点登录 登录流程: 校验用户名密码-生成随机JWT Token-返回给前端。之后前端发请求携带该Token就能验证是哪个用户了。 校验流程:
  • java正则表达式匹配Matcher类的使用
    Matcher类 用法 在 Java 中,Matcher类是用于匹配正则表达式的工具,而group()方法是Matcher类中的一个重要方法,用于提取匹配结果中的捕获组(
  • Java基础面试真题:String为什么是不可变的?

    Java基础面试真题:String为什么是不可变的?
    + 目录 今天来分享一道群友去阿里云面试遇到的 Java 基础面试真题:String、StringBuffer、StringBuilder的区别?String为什么是不可变的?。 网站很
  • 在Spring Boot Web应用程序中序列化枚举

    在Spring Boot Web应用程序中序列化枚举
    枚举类型在定义应用程序域内有限且明确的值集方面非常有效,有助于避免代码中出现无效状态。 应用场景 以下以一个Spring Boot 3.3.x 和 M
  • Item记录线程安全的介绍

    Item记录线程安全的介绍
    确保并发访问安全:线程安全记录的必要性 类如何处理并发访问对于其使用者至关重要,这应被视为类契约的一部分。 错误地假设线程安全
  • 软件开发中的DTO和DAO的介绍

    软件开发中的DTO和DAO的介绍
    DTO(数据传输对象)和 DAO(数据访问对象)是软件架构中的两种常用模式,尤其在基于 Java 的应用中发挥着重要作用。它们协同工作,有效
  • 怎么使用Micronaut注释进行封装?

    怎么使用Micronaut注释进行封装?
    这种封装设计有效防止了对userId和name的直接修改,确保只有授权操作才能更改其值。 Micronaut框架的实际应用 Micronaut是一个基于JVM的现代微
  • 解决Maven无法下载2.1.7.js7版本的itext依赖问题
    问题与分析 某日忽然发现用Maven编译项目报错如下: Failed to collect dependencies at net.sf.jasperreports:jasperreports:jar:6.10.0 - com.lowagie:itext:jar:2.1.7.j
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计