在 Spring Boot 上過載 REST 控制器端點
一種特殊情況是需要相同的端點和方法,但具有不同的引數和不同的行為,例如
http://example.com/test?foo=bobby http://example.com/test?bar=tables |
現在處理這個問題的標準方法是讓一個端點帶有兩個可選引數:
@GetMapping("/endpoint") public Response getStuff(@RequestParam(value = "foo", required = false) String foo, @RequestParam(value = "bar", required = false) String bar) { if (foo != null) // do stuff for foo else if (bar != null) // do stuff for bar } |
但是,還有另一種方法。
@GetMapping(value = "/endpoint", params = { "foo" }) public Response getStuff(@RequestParam(value = "foo") String foo) { // do stuff for foo } @GetMapping("/endpoint", params = { "bar" }) public Response getStuff(@RequestParam(value = "bar") String bar) { // do stuff for bar } |
此功能提供了很大的靈活性,但它帶來了以下形式的風險:
www.example.com/endpoint?foo=bobby&bar=tables
這將導致 Spring boot 崩潰,因為它無法解析到 REST 控制器中的適當功能。
為了解決這個問題,可以使用其中一個端點作為預設值。附加引數將被忽略。
@GetMapping(value = "/endpoint", params = { "foo", "bar" }) public Response getStuff(@RequestParam(value = "foo") String foo @RequestParam(value = "bar", required = false)) String bar { // do stuff for foo by default, ignore bar variable } @GetMapping("/endpoint", params = { "bar" }) public Response getStuff(@RequestParam(value = "bar") String bar) { // do stuff for bar } |
相關文章
- Spring Boot學習3:web篇(中)-Spring boot Rest學習Spring BootWebREST
- Hazelcast JET在Spring Boot上執行ASTSpring Boot
- 重拾後端之Spring Boot(四):使用JWT和Spring Security保護REST API後端Spring BootJWTRESTAPI
- Spring Boot 檔案上傳與下載Spring Boot
- 使用JBang構建Spring Boot Rest API教程Spring BootRESTAPI
- SharePoint REST API - 確定REST端點URLRESTAPI
- 重拾後端之Spring Boot(一):REST API的搭建可以這樣簡單後端Spring BootRESTAPI
- 在 Kubernetes 上使用Spring Boot+ActiveMQSpring BootMQ
- 在雲伺服器上搭建個人版chatGPT及後端Spring Boot整合chat GPT伺服器ChatGPT後端Spring Boot
- Spring Boot + thymeleaf 實現檔案上傳下載Spring Boot
- Spring Boot(十七):使用 Spring Boot 上傳檔案Spring Boot
- 在Spring Boot程式中上傳和下載檔案Spring Boot
- Spring Boot 參考指南(使用RestTemplate呼叫REST服務)Spring BootREST
- Swagger 與 Spring Boot REST API 整合詳解SwaggerSpring BootRESTAPI
- Spring 對檔案上傳下載的支援(Spring boot實現)Spring Boot
- Spring Boot 熱載入Spring Boot
- 透過Docker啟動Solace,並在Spring Boot透過JMS整合SolaceDockerSpring Boot
- Spring Boot原始碼:使用MongoDB MongoTemplate公開REST在幾分鐘內實現CRUD功能Spring Boot原始碼MongoDBREST
- spring boot 圖片上傳Spring Boot
- 在客戶端程式中使用REST SOE客戶端REST
- 如何使用Spring Boot,Spring Data和H2 DB實現REST APISpring BootRESTAPI
- 關於Spring控制器的一點點疑惑Spring
- Spring Boot 啟動過程Spring Boot
- Spring Boot OAuth 2.0 客戶端Spring BootOAuth客戶端
- 使用Spring Boot REST API進行測試驅動開發Spring BootRESTAPI
- 在 Spring Boot 中使用 RedisSpring BootRedis
- 在spring boot專案(maven)中引入其他 spring boot專案Spring BootMaven
- Spring Boot微信點餐系統視訊教程免費下載Spring Boot
- Spring Boot 分片上傳檔案Spring Boot
- Spring Boot的檔案上傳Spring Boot
- Spring Boot使用過濾器和攔截器分別實現REST介面簡易安全認證Spring Boot過濾器REST
- 如何使用簡單程式碼列出Spring Boot暴露的所有端點? - ZaniniSpring Boot
- Spring Boot 整合ActiveMQ的過程Spring BootMQ
- Spring Boot退出登入注意點Spring Boot
- 29.Spring Boot中異常處理與REST格式處理Spring BootREST
- 在Spring boot中通過ApplicationContext獲取bean失敗Spring BootAPPContextBean
- 在Spring Boot框架中使用AOPSpring Boot框架
- JMS 在 Spring Boot 中的使用Spring Boot