一旦从REST层抛出异常,就不会调用@ExceptionHandler

时间:2013-10-04 02:30:45

标签: java rest spring-mvc

我正在使用Spring MVC开发REST服务。我正在尝试使用@ExceptionHandler实现异常处理。当从REST层抛出异常时,它没有被@ExceptionHandler拦截。我错过了什么吗?

@Service
@Path("/customer")
public class CustomerResource extends BaseResource{

@Autowired
private CustomerDao customerDao;

 ........

@GET
@Path("/customer/{accountNumber}")
public Response findCustomerByAccountNumber(String accountNumber) throw Exception{
   Customer customer=null;
   customer=customerDao.find(....);
   if(customer==null)
      throw new ResourceNotFoundException();
   else
    ..........

  }
}

具有异常处理程序方法的基类

public abstract class BaseResource {

.......

@ExceptionHandler({ResourceNotFoundException.class })    
public Response handleException(Exception ex) {
    ErrorResource errResource = new ErrorResource();
    .....   
    return Response.status(Response.Status.NOT_FOUND).entity(errResource).build();
}

}

1 个答案:

答案 0 :(得分:2)

您正在抛出ResourceNotFound但在异常处理程序中指定了ResourceNotFoundException - 这些似乎是不同的异常。抛出ResourceNotFoundException而不是ResourceNotFound或将ResourceNotFound添加到异常处理程序。

修改 不知道我最初是如何错过它的:只是注意到你实际上并没有使用Spring MVC控制器。 Spring MVC异常处理程序仅适用于Spring MVC控制器处理的请求。它们处理控制器处理程序方法体中发生的异常。您似乎使用其他东西来处理REST请求。