Итак, вы хотите исключить firstName
и country.name
. Вот как должен выглядеть ExclusionStrategy
public class TestExclStrat implements ExclusionStrategy {
public boolean shouldSkipClass(Class<?> arg0) {
return false;
}
public boolean shouldSkipField(FieldAttributes f) {
return (f.getDeclaringClass() == Student.class && f.getName().equals("firstName"))||
(f.getDeclaringClass() == Country.class && f.getName().equals("name"));
}
}
Если вы внимательно посмотрите, он возвращает true
для Student.firstName
и Country.name
, что вы и хотите исключить.
Вам нужно применить это ExclusionStrategy
вот так,
Gson gson = new GsonBuilder()
.setExclusionStrategies(new TestExclStrat())
//.serializeNulls() <-- uncomment to serialize NULL fields as well
.create();
Student src = new Student();
String json = gson.toJson(src);
System.out.println(json);
Возвращает:
{ "MiddleName": "Дж.", "Инициалы": "P.F", "LastName": "Фрай", "страна": { "ID": 91}}
Я предполагаю, что объект страны инициализирован с id = 91L
в классе ученика.
Вы можете стать фантазером. Например, вы не хотите сериализовать любое поле, которое содержит в своем имени строку «name». Сделайте это:
public boolean shouldSkipField(FieldAttributes f) {
return f.getName().toLowerCase().contains("name");
}
Это вернет:
{ "initials": "P.F", "country": { "id": 91 }}
РЕДАКТИРОВАТЬ: Добавлено больше информации по запросу.
Это ExclusionStrategy
сделает то же самое, но вам нужно передать «Полное имя поля». Смотрите ниже:
public class TestExclStrat implements ExclusionStrategy {
private Class<?> c;
private String fieldName;
public TestExclStrat(String fqfn) throws SecurityException, NoSuchFieldException, ClassNotFoundException
{
this.c = Class.forName(fqfn.substring(0, fqfn.lastIndexOf(".")));
this.fieldName = fqfn.substring(fqfn.lastIndexOf(".")+1);
}
public boolean shouldSkipClass(Class<?> arg0) {
return false;
}
public boolean shouldSkipField(FieldAttributes f) {
return (f.getDeclaringClass() == c && f.getName().equals(fieldName));
}
}
Вот как мы можем использовать его в общем.
Gson gson = new GsonBuilder()
.setExclusionStrategies(new TestExclStrat("in.naishe.test.Country.name"))
//.serializeNulls()
.create();
Student src = new Student();
String json = gson.toJson(src);
System.out.println(json);
Возвращает:
{ "firstName": "Philip" , "middleName": "J.", "initials": "P.F", "lastName": "Fry", "country": { "id": 91 }}