Spring引导休息忽略一个类

时间:2017-06-16 12:20:51

标签: spring spring-boot jackson spring-data-jpa spring-data-rest

我正在使用spring-boot-starter-data-rest开发REST API。我想与JPA同步的一个类是User类,其中包含有关用户的信息,包括允许谁访问API。

不幸的是,拥有User和UserRepository意味着我的User类在我的API中公开。我能够删除Id(在configureRepositoryRestConfiguration函数中)和用户名和密码(通过将@JsonIgnore添加到我的User类的每个变量)。

不幸的是,API的用户仍然可以请求users表(谁返回一个空用户列表)。虽然这不是一个真正的问题,但我宁愿删除/ users端点。

无法将@JsonIgnore添加到整个User类。

3 个答案:

答案 0 :(得分:2)

导出存储库取决于RepositoryDetectionStrategy默认策略是:

  

公开所有公共存储库接口,但考虑@(存储库)RestResource的exported标志。

根据它来禁用您的回购'您可以为此代表将exported标记设置为false

@RepositoryRestResource(exported = false)
public interface UserRepo extends JpaRepository<User, Integer> {
    //...
}

另一种方法是将 RepositoryDe​​tectionStrategy 全局更改为ANNOTATED

  

只有使用@(Repository)RestResource注释的存储库才会被公开,除非它们的导出标志设置为false。

@Configuration
public class RestConfig extends RepositoryRestConfigurerAdapter {
    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        config.setRepositoryDetectionStrategy(RepositoryDetectionStrategy.RepositoryDetectionStrategies.ANNOTATED);
        super.configureRepositoryRestConfiguration(config);
    }
}

然后,不要将@RepositoryRestResource注释应用于不需要导出的回购。

<强>更新

我们也可以使用此应用程序属性来设置策略:

spring.data.rest.detection-strategy=default

Source

答案 1 :(得分:1)

您可以通过将此注释添加到存储库来隐藏某些存储库:@RepositoryRestResource(exported = false)

此处有更多信息:http://docs.spring.io/spring-data/rest/docs/current/reference/html/#customizing-sdr.hiding-repositories

答案 2 :(得分:0)

projections之类的东西。

您可以使用所需的字段定义界面,并将其用作存储库的方法:

@Projection(name = "simpleUser", types = { User.class }) 
interface SimpleUser { 

  String getFirstName(); 

  String getLastName(); 
}