一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 如何讓Spring Rest 接口中路徑參數可選

如何讓Spring Rest 接口中路徑參數可選

2022-03-07 00:43孫亖 Java教程

這篇文章主要介紹了如何讓Spring Rest 接口中路徑參數可選,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Spring Rest接口路徑參數可選

我有一個 Spring Rest 服務,其中有一個路徑參數是可選的(實際情況是我原來將參數放到路徑中,而另外一個前端通過 body 傳給我)。按照傳統的方式是把這個服務在代碼里面分成兩個方法,一個帶路徑參數,一個不帶,但是這樣看起來不優雅,讓人疑惑。

我試著給 @PathVariable 注解加上 require=false 注解,但是不起作用,返回404錯誤。

下面的形式就是傳統方式:

@RequestMapping(value = "/path/{id}")
public String getResource(@PathVariable String id) {
return service.processResource(id);
} 
@RequestMapping(value = "/path")
public String getResource() {
return service.processResource();
}

但是我真的不喜歡這種方式,臃腫。

從 Spring 4 and Java 8 開始(其實和 Java 8 關系不大),在一個方法里面實現可選路徑參數變得很簡單,如下所示,就是同時定義兩個路由:

@RequestMapping(value = {"/path", "/path/{id}")
public String getResource(@PathVariable Optional<String> id) {
if (id.isPresent()) {
  return service.processResource(id.get());
} else {
  return service.processResource();
}
}

確實,在一個方法里面統一業務要優雅得多。

 

RestFul風格傳參

RestFul風格就是所有參數都由/傳遞,而不是傳統的?xx&xx形式

例如:寫一個Controller:

package controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class RestfulController {
@RequestMapping("/add")
public String test(int a,int b, Model model){
int res = a+b;
model.addAttribute("msg","結果為"+res);
return "test";
}
}

可以看到出現a,b沒找到的錯誤

如何讓Spring Rest 接口中路徑參數可選

按照傳統方式傳遞參數:?a=1&b=2

如何讓Spring Rest 接口中路徑參數可選

那么按照Restful風格傳遞參數就應該:在方法參數值前加@PathVariable注解,并在url上直接綁定參數,可以同時設置Request的方法類型(GET、POST、DELETE、OPTIONS、HEAD、PATCH、PUT、TRACE)

@PathVariable:讓方法參數的值對應綁定到一個url模板變量上

package controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class RestfulController {
@RequestMapping(value = "/add/{a}/{b}",method = RequestMethod.GET)
public String test(@PathVariable int a,@PathVariable int b, Model model){
int res = a+b;
model.addAttribute("msg","結果為"+res);
return "test";
}
}

再次開啟Tomcat,并設定a=1,b=3:

/add/1/3傳遞參數

如何讓Spring Rest 接口中路徑參數可選

這就是restful風格傳參

也可以通過變相的組合注解實現:

  • @PostMapping
  • @GetMapping
  • @PutMapping
  • @DeleteMapping
  • @PatchMapping

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://sunsi.blog.csdn.net/article/details/102519682

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人午夜视频一区二区国语 | 性绞姿始动作动态图 | va在线视频 | 亚洲sss综合天堂久久久 | 欧美视频一区二区三区在线观看 | 日本高清全集免费观看 | 亚州中文字幕 | 美女叽叽 | 美女和男人免费网站视频 | segou视频在线观看 | 亚洲福利天堂 | 视频网站入口在线看 | 亚洲天堂在线视频播放 | 卫生间被教官做好爽HH视频 | 双性np玩烂了np欲之国的太子 | 男人午夜视频在线观看 | 高清欧美videossexo免费 | 免费观看国产大片资源视频 | 九九热在线视频观看这里只有精品 | 日韩精品一区二区三区毛片 | 高清男的插曲女的 欢迎你老狼 | 星星动漫在线观看免费 | 日本三级成人中文字幕乱码 | 欧美视频一区二区三区在线观看 | 动漫美女羞羞 | bt伙计最新合集 | 日你逼 | 99超级碰碰成人香蕉网 | 日韩一二三 | 国产精品久久久久这里只有精品 | 成人精品视频一区二区在线 | 欧美视频一级 | 久久久无码精品亚洲A片软件 | jizz女16处| 日本韩国无矿砖码 | 希望影院高清免费观看视频 | 香蕉91xj.cc | 亚洲精品m在线观看 | 国产成人精品三级在线 | 特级毛片全部免费播放器 | 天天干天天操天天碰 |