J'essaie d'apprendre Gson et j'ai du mal avec l'exclusion de champs. Voici mes classes
public class Student {
private Long id;
private String firstName = "Philip";
private String middleName = "J.";
private String initials = "P.F";
private String lastName = "Fry";
private Country country;
private Country countryOfBirth;
}
public class Country {
private Long id;
private String name;
private Object other;
}
Je peux utiliser le GsonBuilder et ajouter une ExclusionStrategy pour un nom de champ, par exemple firstName
ou country
mais je ne parviens pas à exclure les propriétés de certains champs comme country.name
.
Utilisation de la méthode public boolean shouldSkipField(FieldAttributes fa)
si FieldAttributes ne contient pas suffisamment d'informations pour faire correspondre le champ avec un filtre tel que country.name
.
P.S. : Je veux éviter les annotations car je veux améliorer cela et utiliser RegEx pour filtrer les champs.
Modifier : J'essaie de voir s'il est possible d'émuler le comportement de Plugin Struts2 JSON
en utilisant Gson
<interceptor-ref name="json">
<param name="enableSMD">true</param>
<param name="excludeProperties">
login.password,
studentList.*\.sin
</param>
</interceptor-ref>
Edit : J'ai rouvert la question avec l'ajout suivant :
J'ai ajouté un deuxième champ du même type pour clarifier davantage ce problème. En gros, je veux exclure country.name
mais pas countrOfBirth.name
. Je ne veux pas non plus exclure le Pays comme type. Les types sont donc les mêmes, c'est l'emplacement réel dans le graphe d'objets que je veux localiser et exclure.
1 votes
Depuis la version 2.2, je ne peux toujours pas spécifier un chemin d'accès au champ à exclure. flexjson.sourceforge.net semble être une bonne alternative.
0 votes
Jetez un coup d'œil sur ma réponse à une question assez similaire. Elle repose sur la création d'un
JsonSerializer
pour un certain type -Country
dans votre cas - pour lequel on applique alors unExclusionStrategy
qui décide des champs à sérialiser.0 votes
stackoverflow.com/questions/3544919/