AspectJ如何捕获NoResultException并返回null

时间:2013-02-26 11:44:17

标签: java exception aspectj aspect

我想使用AspectJ来捕获NoResultException并返回null (显然我是一个Aspect noob)

以下是查询的方法:

@Override
public Company getCompanyBySomeNumber(String someNumber) {
    TypedQuery<Company> query = em.createQuery("select c from Company c where c.someNo = ?1", Company.class);
    query.setParameter(1, someNumber);
    return query.getSingleResult();

我有几百个这样的电话,而且我不希望每个人都使用try/catch来将NoResultException更改为空结果。

所以我想写一个方面来捕获异常并将结果更改为null

这是方面代码(请注意我正在使用注释)。 像这样:

@Aspect 
public class NullifyNoResultException {

    @Pointcut("execution(my.namespace.where.the.queries.are * *Throwable(..))")
    void throwableMethod() {}

    @Around("throwableMethod()")
    public void swallowThrowing(ProceedingJoinPoint pjp) {
        try {
            pjp.proceed();
        } catch (NoResultException nre) {
           //TODO change the return value to null

如何将返回值更改为null

1 个答案:

答案 0 :(得分:1)

您是否尝试将方法更改为:

@Around("throwableMethod()")
public Object swallowThrowing(ProceedingJoinPoint pjp) {
    try {
        return pjp.proceed();
    } catch (NoResultException nre) {
        return null;
    }
}