在 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 } |
相關文章
- Hazelcast JET在Spring Boot上執行ASTSpring Boot
- 在 Kubernetes 上使用Spring Boot+ActiveMQSpring BootMQ
- 使用JBang構建Spring Boot Rest API教程Spring BootRESTAPI
- Spring Boot 檔案上傳與下載Spring Boot
- Spring Boot 參考指南(使用RestTemplate呼叫REST服務)Spring BootREST
- Spring 對檔案上傳下載的支援(Spring boot實現)Spring Boot
- 在Spring Boot程式中上傳和下載檔案Spring Boot
- 如何使用Spring Boot,Spring Data和H2 DB實現REST APISpring BootRESTAPI
- 在雲伺服器上搭建個人版chatGPT及後端Spring Boot整合chat GPT伺服器ChatGPT後端Spring Boot
- 在Spring boot中通過ApplicationContext獲取bean失敗Spring BootAPPContextBean
- 透過Docker啟動Solace,並在Spring Boot透過JMS整合SolaceDockerSpring Boot
- Spring Boot原始碼:使用MongoDB MongoTemplate公開REST在幾分鐘內實現CRUD功能Spring Boot原始碼MongoDBREST
- Spring Boot 啟動過程Spring Boot
- Spring Cloud Netflix—宣告性REST客戶端:FeignSpringCloudREST客戶端
- 使用Spring Boot REST API進行測試驅動開發Spring BootRESTAPI
- spring boot 圖片上傳Spring Boot
- 在 Spring Boot 中使用 RedisSpring BootRedis
- 在spring boot專案(maven)中引入其他 spring boot專案Spring BootMaven
- 使用Spring Boot和GraalVM在Knative上構建微服務 - piotrSpring BootLVM微服務
- 3、Spring Cloud Rest工程建立(通過IDEA建立)SpringCloudRESTIdea
- Spring Boot OAuth 2.0 客戶端Spring BootOAuth客戶端
- Spring Boot使用過濾器和攔截器分別實現REST介面簡易安全認證Spring Boot過濾器REST
- 29.Spring Boot中異常處理與REST格式處理Spring BootREST
- Spring Boot退出登入注意點Spring Boot
- 在Kubernetes上使用Spring Boot實現Hazelcast分散式快取 – PiotrSpring BootAST分散式快取
- 如何使用簡單程式碼列出Spring Boot暴露的所有端點? - ZaniniSpring Boot
- Spring Boot的檔案上傳Spring Boot
- Spring Boot 分片上傳檔案Spring Boot
- 在Spring Boot框架中使用AOPSpring Boot框架
- Spring Cloud實戰系列(二) - 客戶端呼叫Rest + RibbonSpringCloud客戶端REST
- Spring Boot微信點餐系統視訊教程免費下載Spring Boot
- 為什麼不推薦在Spring Boot中使用@Value載入配置Spring Boot
- 在Spring Boot中從類路徑載入檔案解決方案Spring Boot
- spring-boot登陸過濾功能Springboot
- Spring Boot 學習資料 (轉載)Spring Boot
- Spring boot + Vue axios 檔案下載Spring BootVueiOS
- Java CRaC 上的Spring Boot3JavaSpring Boot
- 在Docker中部署Spring Boot專案DockerSpring Boot