0

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();
}

}
4

1 に答える 1

2

ResourceNotFound をスローしていますが、例外ハンドラで ResourceNotFoundException を指定しています - これらは異なる例外のようです。ResourceNotFound の代わりに ResourceNotFoundException をスローするか、例外ハンドラに ResourceNotFound を追加してください。

編集: 最初はどうやって見逃したのかわかりません: Spring MVC コントローラーを実際に使用していないことに気付きました。Spring MVC 例外ハンドラーは、Spring MVC コントローラーによって処理されるリクエストに対してのみ機能します。これらは、コントローラー ハンドラー メソッドの本体で発生する例外を処理します。REST リクエストを処理するために別のものを使用しているようです。

于 2013-10-04T17:54:23.717 に答える