J'essaie d'exposer un champ dynamique (transitoire) dans mes modèles via renderJson(), mais ça ne fonctionne pas. Voici un exemple:Jouez! framework renderJson n'expose pas de champs particuliers
@Entity
public class Room extends Model {
public String name;
public String code;
@Transient
public List<Booking> bookings;
@Transient
@Expose
public String resource_uri;
public Room(String name, String code) {
this.name = name;
this.code = code;
}
public List<Booking> getBookings() {
return Booking.find("byRoom", this).fetch();
}
public String getResource_uri(){
return "/api/room/" + this.id; //the uri is evaluated dynamically.
}
Un appel à renderJson (Room.findById (2)) rend cela comme une réponse:
{"name":"Room B","code":"R-B","id":2}
Le champ resource_uri manque. L'annotation @Expose semble ne rien faire. Et je ne peux pas voir la déclaration de renderJson puisque le framework génère tout le code par des annotations.
Existe-t-il un moyen de sérialiser les champs transitoires? le resource_uri n'est pas vraiment quelque chose que je veux persisté à la base de données car ce sont simplement des méta-données utilisées pour l'interface REST. – sw00
En creusant plus loin, j'ai découvert que Gson ne peut pas sérialiser les propriétés. Du tout. C'est parce qu'il utilise la réflexion pour trouver les champs, apparemment. Quelles alternatives puis-je regarder qui a cette fonctionnalité? FlexJSON? – sw00
Vous pouvez le faire avec Gson, j'ai posté un exemple d'un adaptateur personnalisé dans ma réponse. –