2017-10-04 39 views
1

設置爲什麼RestController公開了CrudRepository中的所有操作?

我從中我要揭露只有一組有限的(大部分)讀操作,並添加一些非DB服務PagingAndSortingRepository。我添加了一個REST控制器來放在crud資源庫的前面。

問題

在揚鞭接口,我能看到所有的操作,即使只有一個動作從靜止回購調用。所有的操作都有相同的路徑,例如。在下面的例子中「/ rest/foo」。

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

補充意見

  • 如果我沒有使用CRUD回購在暫停控制器的任何方法,操作未列出。即使如果crud repo是自動連線的。
  • 我不想在CRUD Repo中單獨禁用每項操作。即使我這樣做揚鞭將列出操作,但通話將失敗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

定義@ApiOperation,在您的find方法上方使用適當的HTTP方法(GET?),並且swagger將讀取它,並且您應該只在swagger-ui中獲得一個條目。 – mrkernelpanic

+0

@mrkernelpanic謝謝。添加APIOperations抑制了Swagger隱式操作的列表。我還必須在RequestMapping中添加「method」屬性,禁止包含POST在內的所有請求都發送給「findOne」方法。 – user6317694

回答

1

兩個改變我做來解決該問題:

  1. 在RequestMapping中添加了方法屬性(GET)。如果沒有這個方法,所有的方法都是允許的,必須遵循相同的方法
  2. 正如@mrkernelpanic所示,向該方法添加@ApiOperation可以糾正錯誤,其中Swagger將所有方法添加到其報告的API中。
相關問題