Spring Boot如何实现clients/1路径按id返回数据并优化现有代码
解决方案
调整为clients/1格式路径访问
只需做2处修改即可实现路径参数取值:
- 给
@GetMapping注解添加路径变量占位符,改为@GetMapping("/{id}") - 把参数前的
@RequestParam注解替换为@PathVariable
基础调整后的代码示例:
@GetMapping("/{id}") public Client getClient(@PathVariable int id) { Optional<Client> first = clientList.stream().filter(element -> element.getId() == id).findFirst(); return first.get(); }
代码简化与优化
原有代码直接调用Optional.get()存在风险:如果查询不到对应id的Client,会直接抛出NoSuchElementException,建议补充空值处理,同时省略不必要的中间变量,简化后代码如下:
// 需要提前导入对应依赖: // import org.springframework.http.HttpStatus; // import org.springframework.web.server.ResponseStatusException; @GetMapping("/{id}") public Client getClient(@PathVariable int id) { return clientList.stream() .filter(element -> element.getId() == id) .findFirst() .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "对应id的Client不存在")); }
如果业务允许查询不到时返回null,也可以把orElseThrow替换为orElse(null)。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

