سؤال
سؤال كيفية الإشارة 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>
وقم بتسجيله قبل إجراء التسلسل؛سيفعل نفس الشيء كما هو مذكور أعلاه.
لا تنتمي إلى StackOverflow