次のように、モデルのシリアライザーがあります。
@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 リレーション) を追加して、モデルのすべての直接プロパティをシリアル化することは可能ですか?