【问题标题】:Conditional naming of POJO classesPOJO 类的条件命名
【发布时间】:2017-02-25 20:20:35
【问题描述】:

我们的问题是,我们的服务 GET /services/v1/myobject 返回名为 Xyz 的对象。此表示由多个现有客户端使用。

新服务GET /services/v2/myobject 需要公开完全相同但名称不同的对象,例如XyzLmn

现在一个明显的解决方案是创建两个类XyzXyzLmn,然后将Xyz 复制到XyzLmn 并在XyzLmn 中公开XyzLmn

我正在寻找的是,我怎样才能保持相同的 java pojo 类 Xyz 并有条件地将其序列化为 XyzLmnXyz

【问题讨论】:

    标签: rest serialization pojo annotated-pojos


    【解决方案1】:

    您是否尝试在您的域对象上添加 @JsonIgnoreProperties(ignoreUnknown = true)?

    【讨论】:

    • 我不是 'GET /services/v1/myobject` 的消费者,我是它的生产者。
    • 您尝试过使用Java Generic 类型吗?如@JsonIgnoreProperties(ignoreUnknown = true) @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) public class MyEntity { private String version;私有 T 版本实体; }
    【解决方案2】:

    一种解决方案是:

    1. 编写一个发出XyzLmn的客户序列化程序
    2. 有条件地注册客户序列化程序

      public class XyzWrapperSerializer extends StdSerializer<Item> {
      
      public ItemSerializer() {
          this(null);
      }
      
      public ItemSerializer(Class<Item> t) {
          super(t);
      }
      
      @Override
      public void serialize(
        Item value, JsonGenerator jgen, SerializerProvider provider) 
        throws IOException, JsonProcessingException {
      
          jgen.writeStartObject();
          jgen.writeNumberField("XyzLmn", value.id);
          jgen.writeEndObject();
      } }
      
      XyzWrapper myItem = new XyzWrapper(1, "theItem", new User(2, "theUser"));
      ObjectMapper mapper = new ObjectMapper();
      
      SimpleModule module = new SimpleModule();
      module.addSerializer(XyzWrapper.class, new XyzWrapperSerializer());
      mapper.registerModule(module);
      
      String serialized = mapper.writeValueAsString(myItem);
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多