سؤال

سؤال كيفية الإشارة ObjectMapperأنه يجب عليه تصفية المجموعة المتداخلة للكائن حسب بعض المعايير (الحقل).شاهد الشرح عبر الكود:

الشرح عبر الكود:

لا بد لي من تحويل Container اعترض على JSON.لكني أريد التصفية entries جمع على أساس Entry.value مجال.أعني أنني أريد إجراء تسلسل Container وتشمل فقط تلك الإدخالات التي value == 1.

public class Container {  
  List<Entry> entries;

  public void setEntries(List<Entry> entries) {
    this.entries = entries;
  }
}

public class Entry {
  int value;

  public Entry(int value) {
    this.value = value;
  }
}


public static void main(String[] args) {
  ObjectMapper mapper = new ObjectMapper();
  Container container = new Container();
  container.setEntries(new LinkedList<Entry>({
    {
      add(new Entry(1));
      add(new Entry(2));
      add(new Entry(1));
    }
  }))
  // Now I want to get container object only with two elements in list
  mapper.writeValueAsString(container);
}
هل كانت مفيدة؟

المحلول

تستطيع فعل Entry ينفذ JsonSerializable.في جاكسون 2.x سوف يعطي:

public class Entry
    implements JsonSerializable
{
    int value;

    public Entry(int value) 
    {
        this.value = value;
    }

    @Override
    public void serialize(final JsonGenerator jgen,
        final SerializerProvider provider)
        throws IOException
    {
        // Don't do anything if value is not 1...
        if (value != 1)
            return;

        jgen.writeStartObject();
        jgen.writeNumberField("value", 1);
        jgen.writeEndObject();
    }

    @Override
    public void serializeWithType(final JsonGenerator jgen,
        final SerializerProvider provider, final TypeSerializer typeSer)
        throws IOException
    {
        serialize(jgen, provider);
    }
}

الحل الآخر هو تنفيذ العرف JsonSerializer<Entry> وقم بتسجيله قبل إجراء التسلسل؛سيفعل نفس الشيء كما هو مذكور أعلاه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top