欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JacksonJson序列化:@JsonComponent、StdSerializer

程序员文章站 2022-03-19 15:57:04
业务代码/*** 业务数据类*/@Data@Builder@AllArgsConstructor@NoArgsConstructorpublic class BusinessData {/*** id*/private String id;/*** 金钱*/private Money money;}/*** 金钱类*/@Data@Builder@AllArgsConstr......
                                                                      能否请你动动手指,留下你的一键三连。
 
业务代码
 
/**
* 业务数据类
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class BusinessData {
    /**
     * id
     */
    private String id;

    /**
     * 金钱
     */
    private Money money;
}
/**
* 金钱类
*/
@Data
@AllArgsConstructor
public class Money {
    /**
     * 金额
     */
    private BigDecimal amount;

    /**
     * 单元
     */
    private String unit;
}
/**
* 控制层
*/
@RestController
@RequestMapping("/business")
public class BusinessController {


    @RequestMapping("/get")
    public BusinessData getBusinessData() {
        Money money = new Money(BigDecimal.valueOf(20), "CNY");
        return BusinessData.builder().id("test_001").money(money).build();
    }
}

调用Controller层接口,没有增加自定义序列化之前的返回结果:

{
    "id""test_001",
    "money": {
        "amount"20,
        "unit""CNY"
    }
}
 
 
增加自定义序列化逻辑
 
/**
* 自定义序列化逻辑
*/
@JsonComponent
public class MoneySerializer extends StdSerializer<Money> {
    protected MoneySerializer() {
        super(Money.class);
    }

    /**
    * 序列化逻辑,只取出Money中的amount
    */
    @Override
    public void serialize(Money money, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeNumber(money.getAmount());
    }
}

 

增加自定义序列化逻辑之后的返回结果:
{
    "id""test_001",
    "money"20
}
 

 
划重点
 
@JsonComponent
    用于把该序列化类注册到JsonComponentModule中。
 
StdSerializer:
    所有标准序列化程序所使用的基类,这个是编写自定义序列化程序所推荐使用的基类。
 
    抽象序列化方法:
        serialize,由子类实现该方法。
    
    serialize方法使用方式:
        
        调用JsonGenerator的write开头的方法以写入序列化后的数据
 
         JacksonJson序列化:@JsonComponent、StdSerializer
 

本文地址:https://blog.csdn.net/weixin_42600999/article/details/111897584