我正在使用 Spring Boot 构建 REST API,并决定在 Spring Boot 最新版本中构建它。
我遇到的问题是,由于某种原因我的代码似乎无法达到OrElseGet
,或者我不知道如何处理Optional
stuff.
我想要做的是返回状态码200
以及在数据库中找到该对象时的实体以及状态代码404
如果没有找到。
但是,当指定无效代码时,我得到了字符串null
在响应正文和状态代码 200 中。
这是我的代码:
@GetMapping("/{codigo}")
public ResponseEntity<Optional<Categoria>> searchByCode(@PathVariable Long codigo) {
return Optional
.ofNullable( categoriaRepository.findById(codigo) )
.map(cat-> ResponseEntity.ok().body(cat))
.orElseGet(() -> ResponseEntity.notFound().build());
}
任何帮助,将不胜感激。
这里可以做的改进很少。首先你为什么要退货Optional
来自您的 REST 控制器。我看不出有什么意义。您只需返回Categoria
对象,并让 Jackson 将其序列化为 json 有效负载。因此,将代码更改如下。
@RequestMapping(value = "/{codigo}")
public ResponseEntity<Categoria> searchByCode(@PathVariable Long codigo) {
return categoriaRepository.findById(codigo).map(cat -> ResponseEntity.ok().body(cat))
.orElse(ResponseEntity.notFound().build());
}
这是我用来模拟这个的模拟存储库。
public interface CategoriaRepository extends JpaRepository<Categoria, Integer>{
default Optional<Categoria> findById(long codigo) {
// return Optional.ofNullable(new Categoria(1, "name"));
return Optional.ofNullable(null);
}
}
还将响应包装在另一个响应中Optional
给您的代码增加了一些复杂性,同时也使其更难以阅读。这应该会给你想要的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)