英文:
Optional type is assigned at runtime
问题
我正在按照 Spring Boot 框架的教程进行学习。NetBeans 对下面的代码显示了错误。错误信息是:`不兼容的类型:Optional<UsersDTO> 无法转换为 UserDTO`
@GetMapping("/{id}")
public ResponseEntity<UsersDTO> getUserById(@PathVariable("id") final Long id){
UsersDTO user = userJpaRepository.findById(id);
return new ResponseEntity<UsersDTO>(user, HttpStatus.OK);
}
英文:
I am following a tutorial for springBoot framework. The netbeans shows error for the below code. Error is incompatible type:Optional<UsersDTO> cannot be converted to UserDTO
@GetMapping("/{id}")
public ResponseEntity<UsersDTO>getUserById(@PathVariable("id") final Long id){
UsersDTO user = userJpaRepository.findById(id);
return new ResponseEntity<UsersDTO>(user,HttpStatus.OK);
}
答案1
得分: 2
JPA Repository 的 findById 方法返回一个 Optional,因为可能找不到该项。
因此,这段代码无法编译,因为返回类型不正确,与 findById 的返回类型不匹配。
你需要使用正确的类型,即像这样的 Optional<UsersDTO>:
Optional<UsersDTO> user = userJpaRepository.findById(id);
一旦获得了这个项,你可以通过 user.isPresent() 和 user.get() 来获取 UsersDTO 对象(如果存在)。
英文:
JPA Repository findById returns Optional, as the item may not be found.
Therefore this code doesn't compile because the return type is wrong and doesn't match findById
You need to have the right type, which is Optional<UsersDTO> like so:
Optional<UsersDTO> user = userJpaRepository.findById(id);
Once you have this item you can check user.isPresent() and user.get() to obtain the UsersDTO object if it is present.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论