Json序列化对于子类对象的处理

Json序列化对于子类对象的处理

Lombok装饰子类
  • lombok在装饰子类的时候默认不会启用父类的getter和setter方法,仅针对子类的属性开启getter和setter
  • 如果需要连同父类一起开启getter和setter方法,需要添加**@EqualsAndHashCode**注解并指定参数 (callSuper=false)

上代码:

package com.example.spring_demo.dto;

import com.example.spring_demo.entity.Post;
import lombok.Data;
import lombok.EqualsAndHashCode;

@Data
@EqualsAndHashCode(callSuper=false)
public class PostDTO extends Post {
    //用户id
    private Integer id;
    //用户名字
    private String username;
}
java子类对象序列化时会连同父类一起序列化

上面的类是post的子类,下面先展示post类源码

package com.example.spring_demo.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Data;

import java.time.LocalDateTime;

@Data
@TableName("post")
public class Post {

    @TableId(type = IdType.AUTO)
    private Integer id;
    private String title;
    private String body;
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private LocalDateTime timestamp;
    private Integer authorId;
    //点赞
    private Integer good;
}

使用mybatis去数据库查询然后返回后查看返回结果

下面是方法源码

public List<PostDTO> getPostAll() throws JsonProcessingException {

    //查询所有post,创建一个集合并接收
      //根据文章id查出作者name
    List<PostDTO> list = postMapper.getPostAll();
    ObjectMapper objectMapper = new ObjectMapper();
    String json = objectMapper.writeValueAsString(list.get(0));
    System.out.print("输出json:");
    System.out.println(json);
    return postMapper.getPostAll();

}

输出结果:

使用@JsonSerialize(using = LocalDateTimeSerializer.class)和@JsonDeserialize(using = LocalDateTimeDeserializer.class)两个注解完成对LocalDateTime的json序列化,并导入对应jackson依赖在pom中

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.12.3</version>
</dependency>

此时才可以对这个postDTO进行json序列化并输出查看

在这里插入图片描述

输出json:{"id":1,"title":"test","body":"111","timestamp":"2023-09-04 00:08","authorId":1,"good":null,"username":"caiyi"}

:“test”,“body”:“111”,“timestamp”:“2023-09-04 00:08”,“authorId”:1,“good”:null,“username”:“caiyi”}


而如果此时直接输出返回的list,是只能看到PostDTO里的两个属性的,Java屏蔽了父类对象,但实际上在返回ajax的时候,json序列化已经将PostDTO相关联的全部对象都序列化了出来并返回。
  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值