我正在使用 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 方法,我该如何防止这种情况?
为 DELETE 端点创建一个控制器方法并返回 405 Method Not Allowed。
为了禁用 Swagger(Springfox 库)中特定端点的显示,我在存储库类中的关联方法上添加了注释 ApiIgnore :
@Override
@ApiIgnore
@RestResource(exported = false)
public void deleteById(Integer id);
将
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 放在那里。