Я пытаюсь использовать Spring-data-rest с spring-data-mongodb, чтобы выставлять ресурсы только для чтения.Исключить некоторые поля ресурса Rest-data-rest
Проблема, с которой я столкнулся, заключается в том, что я хочу иметь разные взгляды на свои документы. Допустим, у меня есть личная информация в документе, я не хочу публиковать ее публично.
Так что я попробовал несколько способов. Я прочитал это сообщение https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring, в котором описано, как использовать JsonView, чтобы выбрать поля, которые мы хотим открыть.
Я пробовал так:
@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
}
Это не работает. Однако в комментариях сказано: https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring#comment-1725671983 Ответ на этот вопрос предлагает использовать @Projections Однако @Projections приводят к URL-адресу: «.../recommandations {? Projection}» Это означает, что проекция - это просто вариант, поэтому полный объект все еще открыт.
Существует другой способ, описанный здесь https://github.com/spring-projects/spring-data-rest/wiki/Configuring-the-REST-URL-path Предлагается использовать аннотацию @RestResource (exported = false) для полей, которые мы не хотим раскрывать.
Но это не является гибким. Если я хочу опубликовать открытый API только для чтения и частный API полного доступа. Эта аннотация не может быть отключена на api.
Есть ли еще предложение?
Как вы различаете публичные и частные API? У вас есть два репозитория для одного класса? Как насчет двух классов? – zeroflagL