Spring Data
的{{1}}可能会返回Repository
这对我来说意外,所以我使用这样的AOP:
null
其中@Around("execution(* com.example.demo.repository.*.findOne(..))")
public Object aroundRepository(ProceedingJoinPoint pjp) throws Throwable {
Object[] args = pjp.getArgs();
Object ret = pjp.proceed(args);
if (ret == null) throw new NullEntityException("null");
return ret;
}
是自定义异常,将在此处理:
NullEntityException
我项目中的控制器都是@ControllerAdvice
public class CustomControllerAdvice {
@ExceptionHandler({NullEntityException.class})
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
ErrorMessage handleCustomException(Exception e) {
return new ErrorMessage(e.getMessage());
}
}
。那么在我的DAO层中没有@RestController
样板的所有findOne
方法阻止空返回的最佳方法是什么?
答案 0 :(得分:0)
您的方法是正确的方法/方式。使用aspect将异常包装到自定义异常中是正常的做法。
此外,如果您有自定义存储库实现,您可以覆盖方法findOne()
并从一个NullEntityException抛出,或者您可以将null包装到一些Optional或Null中,而不是使用异常对象,但您需要调整客户端处理这个值。
Just remark - NullEntityException("null")
- 一个奇怪的名称和值,NotFoundException / ObjectNotFoundException(EntityNotFounException是java persistance的异常,最好不要创建具有相同名称的自定义异常)比NullEntityException更逻辑。
答案 1 :(得分:0)
从技术上讲,它运作正常。但是,通过如此一般地处理这些nulls
,您可能会丢失有用的商业信息。
null
通常意味着"该项目未找到"。
不是内部错误,只是他们要求的东西不存在。
我想为那些返回404响应。
有时它可能意味着出现了问题 - 我并没有在这里期望空白"。 我想为那些返回500.
了解null
意味着什么是您的应用程序中的特定业务知识。因此,根据您的系统,您的存储库可能无法应用这样的通用解决方案。
但是,如果你确定null
总是意味着出现了可怕的错误,并且你总是希望为此投入500,那么你得到的就是好的。