我得到了這段代碼,我正在從教程中學習。我想通過 url 回傳一個元素,它看起來像clients/1而不是clients?id=1. 我怎樣才能做到這一點?另外,下面的代碼可以更簡單嗎?
@GetMapping
public Client getClient(@RequestParam int id) {
Optional<Client> first = clientList.stream().filter(element -> element.getId() == id).findFirst();
return first.get();
}
uj5u.com熱心網友回復:
您可能希望@PathVariable按如下方式使用:
@Controller
@RequestMapping("/clients")
public class MyController {
@GetMapping("/{id}")
public Client getClient(@PathVariable int id) {
return clientList.stream().filter(element -> element.getId() == id).findFirst().orElseThrow();
}
請注意,Optional可以使用orElseThrow方法解包。NoSuchElementException如果沒有為 找到元素,這將拋出一個id。
其他解決方案是在orElse(new Client(...))未找到任何內容時使用回傳默認值。
get()真的不推薦使用。來自該get()方法的 JavaDoc :
API 注意:此方法的首選替代方法是
orElseThrow().
盡管get()也可能拋出NoSuchElementException,類似于orElseThrow,但通常的共識是get不應該使用isPresent,或者根本不應該使用。還有其他幾種方法可以在Optional不強制您撰寫if.
的整個想法Optional是通過強迫您考慮內部沒有價值的情況來克服這一點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/365166.html
