在 Spring Data Rest 中,如何防止 DELETE HTTP 方法从我的 JpaRepository 导出?

问题描述 投票:0回答:3

我正在使用 spring-data-rest 并且我有一个像这样的 JpaRepository:

@RepositoryRestResource(path = "projects")
public interface ProjectsRepository extends JpaRepository<MetricsProjects, Integer> {...}

我的存储库界面:

@RepositoryRestResource(path = "projects")
public interface ProjectsRepository extends JpaRepository<MetricsProjects, Integer> {
    
    List<MetricsProjects> findByProjectName(String projectName);
    
    @Override
    @RestResource(exported = false)
    public void deleteById(Integer id);
    
    @Override
    @RestResource(exported = false)
    public void delete(MetricsProjects entity);
    
    @Override
    @RestResource(exported = false)
    public void deleteAll(Iterable<? extends MetricsProjects> entities);
    
    @Override
    @RestResource(exported = false)
    public void deleteAll();
    
    @Override
    @RestResource(exported = false)
    public void deleteInBatch(Iterable<MetricsProjects> entities);
    
    @Override
    @RestResource(exported = false)
    public void deleteAllInBatch();

}

我还添加了disableDefaultExposure(),正如某处建议的那样。

我的配置文件:

@Configuration
public class SpringDataRestConfiguration implements RepositoryRestConfigurer {
    
    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration restConfig) {
        restConfig.disableDefaultExposure();
    }

}

但是我仍然看到从 Swagger-UI 中公开的 DELETE 方法,我该如何防止这种情况?

spring-boot spring-data-jpa swagger spring-data-rest
3个回答
0
投票

为 DELETE 端点创建一个控制器方法并返回 405 Method Not Allowed。


0
投票

为了禁用 Swagger(Springfox 库)中特定端点的显示,我在存储库类中的关联方法上添加了注释 ApiIgnore :

 @Override
 @ApiIgnore
 @RestResource(exported = false)
 public void deleteById(Integer id);

0
投票

configureRepositoryRestConfiguration
修改为

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration restConfig) {
        restConfig.getExposureConfiguration()
                .forDomainType(put the class type here)
                .withItemExposure((metadata, httpMethods) -> httpMethods.disable(HttpMethod.DELETE))
                .withCollectionExposure((metadata, httpMethods) -> httpMethods.disable(HttpMethod.DELETE));
    }

将此处的类类型替换为 className.class,例如,如果 className 是 MetricsProjects,则将 MetricsProjects.class 放在那里。

这是附加信息。

© www.soinside.com 2019 - 2024. All rights reserved.