代码之家  ›  专栏  ›  技术社区  ›  Eido95

根据另一个字段值序列化和反序列化字段

  •  0
  • Eido95  · 技术社区  · 6 年前

    如何根据同一类中的另一个字段值序列化或反序列化字段?

    Packet type payload 字段将被序列化和反序列化。

    public enum PayloadType {
        HTTP,
        HTTPS,
        FTP
    }
    

    数据包类

    public class Packet {
        private final String payload;
        // This field should determine how "payload" field is serialized.
        private final PayloadType type;     
        private final Date creationTime;
    
    @JsonCreator
    public Packet(String payload, PayloadType type) {
        this.payload = payload;
        this.type = type;
        this.creationTime = new Date();
    }
    
    public String getPayload() {
        return this.payload;
    }
    
    public PayloadType getType() {
        return this.type;
    }
    
    public Date getCreationTime() {
        return this.creationTime;
    }
    

    public class PacketTests {
    @Test
    public void packetSerialization_fromHttpType() throws JsonProcessingException {
        // Given
        ObjectMapper jackson = new ObjectMapper();
        String payload = "hello world";
        PayloadType type = PayloadType.HTTP;
        Packet packet = new Packet(payload, type);
        String json;
    
        // When
        json = jackson.writeValueAsString(packet);
    
        // Then
        System.out.println(json);
    }
    

    电流输出

    {"payload":"hello world","type":"HTTP","creationTime":1542538836041}
    

    预期产出

    {"payload":"(http) hello world","type":"HTTP","creationTime":1542538836041}
    {"payload":"(https) hello world","type":"HTTPS","creationTime":1542538836041}
    {"payload":"X9hnahj83","type":"FTP","creationTime":1542538836041}
    

    有效载荷 属于 FTP 是base64字符串。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Ori Marko    6 年前

    与@comment类似,更新有效负载getter以返回不同的输出值

     public String getPayload() {
         return "(" + getType().name().toLowerCase() + ") " +  this.payload;
     }