0

我有一个模型的序列化程序,如下所示:

@Override
public void serialize(MyModel model, JsonGenerator generator, SerializerProvider serializer) throws IOException,JsonProcessingException {
    if (model == null) return;
    
    SimpleDateFormat en = new SimpleDateFormat("yyyy-MM-dd");
    
    generator.writeStartObject();
    
    generator.writeNumberField("id", model.id);
    generator.writeStringField("name", model.name);
    generator.writeStringField("display", model.toString());
    
    SubModel subModel = model.subModel;

    // HERE IT IS :
    subModel.refresh(); // required to not have a nullpointerexception
    // If I don't do that, the subModel.xxxx will throw a NullPointerException
    // If I log the content :
    Logger.info(String.valueOf(subModel));

    // It will work (display the toString()) AND the following won't throw a NullPointerException

    generator.writeObjectFieldStart("quotas");
        generator.writeNumberField("id", subModel.id);
        generator.writeStringField("display", subModel.toString());
    generator.writeEndObject();


    generator.writeEndObject();
    generator.close();
}

为什么?有没有办法避免调用 arefresh()或其他东西?

顺便说一句,是否可以在序列化程序中使用序列化程序:就我而言,我想列出 的所有属性model,但我只想列出 subModel 的一部分。这就是这个 Serializer 的目的。

但据我所知,我添加以列出所有属性并将它们添加到生成器(第 9 行 -> 11 行)。是否可以通过添加子模型(ManyToOne 关系)来序列化模型的所有直接属性,而不在关系上使用 @JsonIgnore?

4

1 回答 1

1

AFAIK,有时,Ebean 在与公共属性进行连接时遇到一些困难,因此请尝试在您的模型中使用 getter getSubmodel()::

public class MyModel extends Model {

   ...

   private SubModel subModel;

   public SubModel getSubModel() {
      return this.subModel;
   }
}
于 2012-08-11T10:09:33.557 回答