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();
}

なんで?refresh()aまたは何か他のものを呼び出す必要がないようにする方法はありますか?

ところで、シリアライザー内でシリアライザーを使用することは可能ですか: 私の場合、 のすべてのプロパティをリストしmodelたいのですが、サブモデルの一部だけをリストしたいと思います。それがこのシリアライザーの目的です。

しかし、私が知る限り、すべてのプロパティを一覧表示してジェネレータに追加します (9 行目から 11 行目)。リレーションで @JsonIgnore を使用せずに、サブモデル (ManyToOne リレーション) を追加して、モデルのすべての直接プロパティをシリアル化することは可能ですか?

4

1 に答える 1

1

私の知る限り、Ebean ではパブリック プロパティとの結合が困難な場合があるため、モデルでゲッターを使用してみてください: getSubmodel():

public class MyModel extends Model {

   ...

   private SubModel subModel;

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