jackson相关注解

这篇具有很好参考价值的文章主要介绍了jackson相关注解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

@JsonIgnoreProperties

        @JsonIgnoreProperties(value = { "prop1","prop2" })用来修饰Pojo类, 在序列化和反序列化的时候忽略指定的属性, 可以忽略一个或多个属性.
        @JsonIgnoreProperties(ignoreUnknown = true)用来修饰Pojo类, 在反序列化的时候忽略那些无法被设置的属性, 包括无法在构造子设置和没有对应的setter方法.

@JsonInclude

        @JsonInclude注解的作用是指定实体类在序列化时的策略,在实体类序列化成json的时候在某些策略下,加了该注解的字段不去序列化该字段。例如,返回前端的实体类中如果某个字段为空的话那么就不返回这个字段了。

参数主要有:

  • ALWAYS:表示总是序列化所有属性
  • NON_NULL:表示序列化非null属性
  • NON_ABSENT:表示序列化非null或者引用类型缺省值,例如java8的Optional类,这个选中通常与Optional一起使用
  • NON_EMPTY:表示序列化非Empty的属性,例如空的集合不会被序列化
  • NON_DEFAULT:仅包含与POJO属性默认值不同的值
  • CUSTOM:由{@link JsonInclude#valueFilter}指定值本身,或由{@link JsonInclude#contentFilter}指定结构化类型的内容,由过滤器对象的equals方法进行序列化,返回true则会被排除,返回false会被序列化
  • USE_DEFAULTS:使用默认值
@JsonFormat

  @JsonFormat可以完成格式转换。例如对于Date类型字段,如果不适用JsonFormat默认在rest返回的是long,如果使用@JsonFormat(timezone = “GMT+8”, pattern = “yyyy/MM/dd HH:mm:ss”),就返回"2020/07/29 09:58:15"

@JsonIgnore

        @JsonIgnore注解用来忽略某些字段,可以用在变量或者Getter方法上,用在Setter方法时,和变量效果一样。这个注解一般用在要忽略的字段上。用在属性和方法上,效果是一样的,都会屏蔽掉get、set方法 。这个注解只能用在POJO存在的字段要忽略的情况,不能满足现在需要的情况。

@JsonProperty

       如果 json field 的名称和Pojo 的属性名不一致的时, 可以用 @JsonProperty 来注解 getter() 或 setter() 方法, 该注解设定json 对应的属性名, 另外@JsonProperty也经常用来注解构造子的形参, 这时候构造子应该加@JsonCreator 注解.

 @JsonCreator

        如果 Pojo 类定义有参数的构造子, 但没有提供无参构造子时, 在反序列化时是会报错. 有下面两个办法:

  1. 增加一个无参构造子
  2. 为这个有参数的构造子, 加上 @JsonCreator 注解, 同时参数需要加上 @JsonProperty 注解.
@JsonSetter 和 @JsonGetter

        如果 json field 的名称和Pojo 的属性名不一致的时, 可以使用@JsonGetter来注解 getter(), 使用 @JsonSetter 来注解setter() 方法. 这两个注解都可以指定一个属性名. 这两个注解都可以用 @JsonProperty 替换.

@JsonAnySetter

        一般对象属性名都是确定的, 比如 Person这个对象, 有 name/age等具名属性, 但有时候我们还需要为Person这个对象设定一些扩展属性, 这些扩展属性名称暂时不好确定, 通常使用 Map<String, String> 来存放这些扩展属性的K/V. 要把json 数据中的这些属性反序列化到类的Map中, 需要在类上增加一个K/V的setter方法, 而且这个setter方法要加上@JsonAnySetter注解.

public class Person {
    public String name;
    private Integer age;
    private Map<String, String> properties;
 
    @JsonAnySetter
    public void add(String key, String value) {
        properties.put(key, value);
    }
}
@JsonAnyGetter

        和@JsonAnySetter 注解相对应, 如果要将类中的Map K/V属性序列化到json中, 需要在类上增加一个 @JsonAnyGetter 方法, 该方法直接返回KV map就行.

public class Person {
    public String name;
    private Integer age;
    private Map<String, String> properties;
 
    @JsonAnyGetter
    public void add(String key, String value) {
        properties.put(key, value);
    }
}
@JsonSerialize 和 @JsonDeserialize

        @JsonSerialize注解可以为类属性设定专门的序列化函数, @JsonDeserialize注解用来为json属性定制化反序列化函数。比如,对于一些敏感性的数据如手机号,姓名等。我们需要做加密传输。

SpringMVC默认的JSON框架为jackson,也可以使用fastjson。

jackson框架的自定义序列化:

1. 自定义的属性json化需要自定义JsonSerializer的实现类.如:

public class EncryptSerializer extends JsonSerializer<String> {

	@Override
	public void serialize(String value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        //数据加密
		jsonGenerator.writeString(RSAUtils.encryptByPriKey(value));
	}
}

2. jackson的反序列化:

/**
 * 自定义序列化
 **/
public class DecryptDeserializer extends JsonDeserializer<String> {
​
    @Override
    public String deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
       retrun RSAUtils.decrypt(jp.getText());
    }
}

如果使用的是fastjson。则需要使用ObjectSerializer和ObjectDeserializer

fastjson使用的是 @JSONField类参数化数据

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
</dependency>文章来源地址https://www.toymoban.com/news/detail-782663.html

    class RSADeserializer implements ObjectDeserializer,ObjectSerializer{
 
		/*@Override
		public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
			String val = (String) parser.parse();
			return (String)RSAUtils.decrypt(val);
		}*/

        public String deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
			String val = (String) parser.parse();
			return RSAUtils.decrypt(val);
		}
 
		@Override
		public int getFastMatchToken() {
			// TODO Auto-generated method stub
			return 0;
		}
 
		@Override
		public void write(JSONSerializer serializer, Object object,Object fieldName, Type fieldType, int features)
				throws IOException {
			serializer.write(RSAUtils.encrypt(object));
		}
		
	}

到了这里,关于jackson相关注解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Jackson 2.x 系列【25】Spring Boot 集成之起步依赖、自动配置

    有道无术,术尚可求,有术无道,止于术。 本系列Jackson 版本 2.17.0 本系列Spring Boot 版本 3.2.4 源码地址:https://gitee.com/pearl-organization/study-jaskson-demo Spring Boot 是当前最流行的 Java 应用开发框架,简化开发的同时也导致了很多开发人员只会写业务代码,并不太清楚内部组件和配

    2024年04月17日
    浏览(43)
  • Spring boot 常见注解

    Spring Boot是一个基于Spring框架的快速开发框架,它通过自动化配置和约定优于配置的原则,简化了Spring应用程序的开发过程。Spring Boot可以帮助开发者快速构建独立的、生产级别的应用程序,并且可以与其他Spring框架和第三方库无缝集成。 Spring Boot提供了很多便利的特性,比如

    2024年01月18日
    浏览(41)
  • Spring boot注解讲解

    人不走空                                                                            目录         🌈个人主页:人不走空       💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨   注解 注解列表如下 JPA注解 作者其他作品:   @SpringBootApplication :申

    2024年02月19日
    浏览(47)
  • Spring Boot常用注解

    在 Spring Boot 中,有许多注解用于简化和标识应用程序的不同方面。以下是一些常用的 Spring Boot 注解: @SpringBootApplication : 用于标识主应用程序类。通常与 @EnableAutoConfiguration 、 @ComponentScan 和 @Configuration 一起使用,它是一个复合注解,用于简化配置。 @Controller : 用于标识控

    2024年01月19日
    浏览(42)
  • Spring Boot 学习之——@SpringBootApplication注解(自动注解原理)

    springboot是基于spring的新型的轻量级框架,最厉害的地方当属**自动配置。**那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置 从上面代码可以看出,Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)最为耀眼,所以要揭开SpringBoot的神秘面纱

    2024年01月25日
    浏览(49)
  • Spring Boot 启动注解分析

    虽然我们在日常开发中,Spring Boot 使用非常多,算是目前 Java 开发领域一个标配了,但是小伙伴们仔细想想自己的面试经历,和 Spring Boot 相关的面试题都有哪些?个人感觉应该是比较少的,Spring Boot 本质上还是曾经 SSM 那一套,只是通过各种 starter 简化了配置而已,其他都是

    2024年02月13日
    浏览(41)
  • Spring Boot 注解解读详解

    Spring Boot提供了大量的注解来简化Spring应用的开发。下面我们将详细介绍一些最常用的Spring Boot注解。 1. @SpringBootApplication 这是一个复合注解,用于标记应用的主类。它包含了以下三个注解: @SpringBootConfiguration :等同于Spring的@Configuration,标明该类是配置类,并会把该类作为

    2024年02月06日
    浏览(45)
  • Spring boot自定义注解

    定义一个注解类 使用AOP对注解进行解析,需要定义一个切面类,包括自定义的切点方法normalPointCut(),以及连接点的处理方法normalPointAround()。连接点中的ProceedingJoinPoint可以获取被代理类的方法属性等。 2.1 定义注解 2.2 实现参数解释器 记得实现WebMvcConfigurer 接口配置LimitReque

    2023年04月27日
    浏览(39)
  • Spring Boot面向切面加注解

    一.项目pom.xml文件引入切面依赖 二.定义注解类 注解: @Target @Target 说明了Annotation所修饰的对象范围 取值(ElementType)有: 1.CONSTRUCTOR:用于描述构造器 2.FIELD:用于描述域 3.LOCAL_VARIABLE:用于描述局部变量 4.METHOD:用于描述方法 5.PACKAGE:用于描述包 6.PARAMETER:用于描述参数 7.TYPE:用于描述

    2024年02月06日
    浏览(53)
  • Spring Boot中的@EnableAutoConfiguration注解

    Spring Boot是一个非常流行的Java框架,它可以快速创建基于Spring的应用程序。Spring Boot提供了许多自动配置功能,使得开发者可以非常容易地创建一个可运行的应用程序。其中,@EnableAutoConfiguration注解是Spring Boot自动配置功能的核心之一。 @EnableAutoConfiguration注解是Spring Boot的核心

    2024年02月11日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包