为什么 RestController 会暴露 CrudRepository 中的所有操作?

Why does RestController expose all the operations in CrudRepository?

设置

我有一个 PagingAndSortingRepository,我只想从中公开一组有限的(大部分)读取操作并添加一些非数据库服务。我在 crud 存储库前面添加了一个 REST 控制器。

问题

在 Swagger 界面上,我看到所有操作都已启用,即使只从 rest repo 调用了一个操作。所有操作都获得相同的路径,例如下例中的“/rest/foo”。

如何禁用 Spring 引导注入所有操作?

额外观察

示例代码

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);
  }
}

我为解决该问题所做的两项更改:

  1. 在 RequestMapping 中添加了方法属性 (GET)。没有这个,所有的方法都被允许,绑定到相同的方法。
  2. 正如@mrkernelpanic 所建议的那样,将@ApiOperation 添加到方法中纠正了 Swagger 将所有方法添加到其报告中的错误 API。