亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何讓Spring Rest 接口中路徑參數(shù)可選

 更新時間:2021年10月30日 10:56:30   作者:孫亖  
這篇文章主要介紹了如何讓Spring Rest 接口中路徑參數(shù)可選,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Spring Rest接口路徑參數(shù)可選

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

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

下面的形式就是傳統(tǒng)方式:

@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 關(guān)系不大),在一個方法里面實現(xiàn)可選路徑參數(shù)變得很簡單,如下所示,就是同時定義兩個路由:

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

確實,在一個方法里面統(tǒng)一業(yè)務(wù)要優(yōu)雅得多。

RestFul風(fēng)格傳參

RestFul風(fēng)格就是所有參數(shù)都由/傳遞,而不是傳統(tǒng)的?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","結(jié)果為"+res);
return "test";
}
}

可以看到出現(xiàn)a,b沒找到的錯誤

在這里插入圖片描述

按照傳統(tǒng)方式傳遞參數(shù):?a=1&b=2

在這里插入圖片描述

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

@PathVariable:讓方法參數(shù)的值對應(yīng)綁定到一個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}/",method = RequestMethod.GET)
public String test(@PathVariable int a,@PathVariable int b, Model model){
int res = a+b;
model.addAttribute("msg","結(jié)果為"+res);
return "test";
}
}

再次開啟Tomcat,并設(shè)定a=1,b=3:

/add/1/3傳遞參數(shù)

在這里插入圖片描述

這就是restful風(fēng)格傳參

也可以通過變相的組合注解實現(xiàn):

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論