为什么 RestController 会暴露 CrudRepository 中的所有操作?
Why does RestController expose all the operations in CrudRepository?
设置
我有一个 PagingAndSortingRepository,我只想从中公开一组有限的(大部分)读取操作并添加一些非数据库服务。我在 crud 存储库前面添加了一个 REST 控制器。
问题
在 Swagger 界面上,我看到所有操作都已启用,即使只从 rest repo 调用了一个操作。所有操作都获得相同的路径,例如下例中的“/rest/foo”。
如何禁用 Spring 引导注入所有操作?
额外观察:
- 如果我在rest controller中没有任何使用crud repo的方法,则不会列出操作。即使 crud 回购是自动连接的。
- 我不想单独禁用 CRUD Repo 中的每个操作。即使我这样做,Swagger 也会列出操作,但调用会失败并返回 405。
示例代码
public interface MyCRUDRepository extends PagingAndSortingRepository<Foo, FooPK> {
}
@RestController
public class MyRESTController {
@Autowired
MyCRUDRepository repository;
@RequestMapping("/rest/foo")
public Foo find(String id) {
return repository.findOne(id);
}
}
我为解决该问题所做的两项更改:
- 在 RequestMapping 中添加了方法属性 (GET)。没有这个,所有的方法都被允许,绑定到相同的方法。
- 正如@mrkernelpanic 所建议的那样,将@ApiOperation 添加到方法中纠正了 Swagger 将所有方法添加到其报告中的错误 API。
设置
我有一个 PagingAndSortingRepository,我只想从中公开一组有限的(大部分)读取操作并添加一些非数据库服务。我在 crud 存储库前面添加了一个 REST 控制器。
问题
在 Swagger 界面上,我看到所有操作都已启用,即使只从 rest repo 调用了一个操作。所有操作都获得相同的路径,例如下例中的“/rest/foo”。
如何禁用 Spring 引导注入所有操作?
额外观察:
- 如果我在rest controller中没有任何使用crud repo的方法,则不会列出操作。即使 crud 回购是自动连接的。
- 我不想单独禁用 CRUD Repo 中的每个操作。即使我这样做,Swagger 也会列出操作,但调用会失败并返回 405。
示例代码
public interface MyCRUDRepository extends PagingAndSortingRepository<Foo, FooPK> {
}
@RestController
public class MyRESTController {
@Autowired
MyCRUDRepository repository;
@RequestMapping("/rest/foo")
public Foo find(String id) {
return repository.findOne(id);
}
}
我为解决该问题所做的两项更改:
- 在 RequestMapping 中添加了方法属性 (GET)。没有这个,所有的方法都被允许,绑定到相同的方法。
- 正如@mrkernelpanic 所建议的那样,将@ApiOperation 添加到方法中纠正了 Swagger 将所有方法添加到其报告中的错误 API。