代码之家  ›  专栏  ›  技术社区  ›  Matías Santurio

Jackson:将同一个对象序列化为多个JSON

  •  0
  • Matías Santurio  · 技术社区  · 2 年前

    我有两个POJO,看起来像:

    public ResponseA {
      private HeavyObject object;
      private AdditionalDataA additionalData;
    
      public ResponseA(HeavyObject object, AdditionalDataA additionalData) {
        this.object = object;
        this.additionalData = additionalData;
      }
    }
    
    public ResponseB {
      private HeavyObject object;
      private AdditionalDataB additionalData;
    
      public ResponseB(HeavyObject object, AdditionalDataB additionalData) {
        this.object = object;
        this.additionalData = additionalData;
      }
    }
    

    然后我有一个方法,将这些对象发送到不同的端点,类似于:

      public void sendResponses(
          ObjectMapper mapper, 
          HeavyObject object, 
          AdditionalDataA addDataA, 
          AdditionalDataB addDataB) {
    
        // Here object is serialized twice, which is costly!
        String jsonA = mapper.writeValueAsString(new ResponseA(object, addDataA));
        String jsonB = mapper.writeValueAsString(new ResponseB(object, addDataB));
        sendResponseA(jsonA);
        sendResponseB(jsonB);
    }
    

    有没有一种方法可以序列化这些响应,以便 HeavyObject 只序列化一次?

    1 回复  |  直到 2 年前
        1
  •  1
  •   forty-two    2 年前

    是的,您可以对 object 字段在 ResponseA ResponseB 具有 @JsonRawValue ,将其转换为 String ,并在单独的步骤中对其进行序列化。