Хорошо, я думаю, что нашел вашу проблему: когда GSON пытается построить объекты из этой строки json в реальный объект (или, в данном случае, список объектов), процесс завершается неудачно, потому что, когда он попадает в фильтрНемного .predicate, вероятно, он пытается сделать что-то вроде этого:
LifecycleFilterPredicate predicate = new LifecycleFilterPredicate();
predicate.setPrefix("tmp");
Что не работает, потому что у LifecycleFilterPredicate нет открытого конструктора без каких-либо аргументов, как вы заявили.
Я думаю, что, к сожалению, ваше единственное решение состоит в том, чтобы проанализировать JSON по-другому.
ОБНОВЛЕНИЕ
Вам потребуется использовать адаптер типа GSON следующим образом:
class LifecycleFilterPredicateAdapter extends TypeAdapter<LifecycleFilterPredicate>
{
@Override
public LifecycleFilterPredicate read(JsonReader reader)
throws IOException
{
if (reader.peek() == JsonToken.NULL) {
reader.nextNull();
return null;
}
reader.beginObject();
if(!"prefix".equals(reader.nextName()))
{
return null;
}
String prefix = reader.nextString();
LifecyclePrefixPredicate predicate = new LifecyclePrefixPredicate(prefix);
reader.endObject();
return predicate;
}
@Override
public void write(JsonWriter writer, LifecycleFilterPredicate predicate)
throws IOException
{
//nothing here
}
}
...
Gson gson = new GsonBuilder().serializeNulls().excludeFieldsWithModifiers(Modifier.FINAL,
Modifier.TRANSIENT, Modifier.STATIC, Modifier.ABSTRACT)
.registerTypeAdapter(LifecycleFilterPredicate.class, new LifecycleFilterPredicateAdapter()).create();
Я попробовал его локально и больше не получаю исключение:)