为什么RestController公开CrudRepository中的所有操作?

时间:2017-10-04 13:56:32

标签: java spring spring-boot spring-data spring-restcontroller

设置

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

问题

在Swagger界面上,我看到所有操作都已启用,即使只从其余仓库调用了一个操作。所有操作都获得相同的路径,例如。 " /休息/富"在下面的例子中。

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

其他观察

  • 如果我在休息控制器中没有使用crud repo的任何方法,则不会列出操作。即使crud repo是自动连接的。
  • 我不想单独禁用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);
  }
}

1 个答案:

答案 0 :(得分:1)

我为修复此问题做了两处更改:

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