找不到作为url param传递的数据库中的现有id

时间:2018-02-02 09:29:22

标签: hibernate spring-boot

我有以下控制器:

@PostMapping("/product/{id}")
void getProduct (@PathVariable UUID productId);

id是我的数据库表中的id。我的ORM是Hibernate。如果最好的方式没有这样的NOT_FOUND,如何返回id? 我知道我可以:

void getProduct(@PathVariable UUID productId){
    // check whether exists a file and throw NOT_FOUND if not.
}

我正在寻找更好的方法 - 这是我项目中非常常见的情况。

1 个答案:

答案 0 :(得分:1)

对您而言,一个非常常见且有效的模式是服务层将未找到数据库的案例委托给特定于应用程序的异常,然后控制器顾问程序将异常转换处理为有意义的休息响应。 This是一篇旧文章@ spring.io,它将为您提供更多建议。

服务bean:

@Service
class ResourceService {

  @Autowired
  ResourceDao dao;

  Resource getById(UUID id) {
    Resource res = dao.findById(id);
    if (res != null) {
      throw new MyNotFoundException();
    }
    return res;
  }

}

顾问bean:

@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(value = MyNotFoundException.class)
    protected ResponseEntity<Object> handleConflict(MyNotFoundException ex, WebRequest request) {
        String bodyOfResponse = "No resource with this id found.";
        return handleExceptionInternal(ex, bodyOfResponse, 
          new HttpHeaders(), HttpStatus.NOT_FOUND, request);
    }
}