讓 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();
  }
}

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章