【发布时间】:2017-01-07 02:26:53
【问题描述】:
我正在为一个大学项目编写一个简单的库 API。我有一个包含书籍的数据库,每本书都有自己的 ID。我正在使用 Spring Boot 来提供服务。我有一个扩展JpaRepository<Book, Long> 的BookRepository 和一个服务实现。
@Service
public class BookServiceImpl implements BookService{
@Autowired
private BookRepository bookRepository;
@Async
@Override
public void delete (Long id){
bookRepository.delete(id);
}
}
稍后,REST 控制器处理请求:
@RestController
public class BookServiceController{
@Autowired
private BookService bookService;
@RequestMapping(value="books/{id}", method = RequestMethod.DELETE)
public ResponseEntity<Book> deleteBook (@PathVariable("id") Long id){
bookService.delete(id);
return new ResponseEntity<Book>(HttpStatus.OK);
}
}
现在,如果我要删除不在数据库中的 Book,例如 ID 为 123,我会抛出 EmptyResultDataAccessException。
我的问题是,我如何以及在哪里处理异常,以及如何避免以这种方式投射 NullPointerException?
提前致谢。
【问题讨论】:
-
(1) 您是否有理由在存储库上分层单独的
BookService? (2) 尽可能选择构造函数注入而不是字段注入。
标签: java spring rest spring-data spring-data-jpa