Exclure certains champs de source de données reste des ressources

Je suis en train d'utiliser Spring-data-reste avec ressort de données mongodb pour exposer en lecture seule de ressources.

Le problème que j'ai rencontré, c'est que je veux avoir différents points de vue de mes documents.
Disons que j'ai quelques informations privées dans un document, je ne veux pas les exposer publiquement.

Donc j'ai essayé de plusieurs façons.
J'ai lu ce post https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring décrivant comment utiliser JsonView afin de sélectionner les champs que nous voulons exposer.

J'ai essayé comme ceci :

@RepositoryRestResource(collectionResourceRel = "recommandation", path =    "recommandations")
interface RecommandationRepository extends MongoRepository<Recommendation,   ObjectId> {

@Override
@JsonView(View.Public.class)
Iterable<Recommendation> findAll(Iterable<ObjectId> objectIds);
... //other find methods
}

Ça ne fonctionne pas. Cependant, il est dit dans les commentaires : https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring#comment-1725671983
La réponse suggère d'utiliser @Projections
Toutefois @Projections de résultat dans l'url comme ça : ".../recommandations{?projection}"
Cela signifie que la projection est juste une option, de sorte que l'intégralité de l'objet est toujours exposé.

Il y a une autre méthode décrite ici https://github.com/spring-projects/spring-data-rest/wiki/Configuring-the-REST-URL-path
Il suggère d'utiliser @RestResource(exporté = false) annotation pour les champs nous ne voulons pas nous exposer.

Mais il n'est pas souple. Si je veux exposer un public en lecture seule API et d'une salle d'accès complet de l'API. Cette annotation ne peut pas être désactivé par l'api.

Est-il une autre suggestion ?

Comment faites-vous la distinction entre le public et le privé Api? Avez-vous des deux référentiels pour la même classe? Comment environ deux classes, alors?

OriginalL'auteur Hugo Lassiège | 2015-02-04