2011-11-12 15 views
3

私はSpring MVCを使用してWebサービスを作成しています。コントローラはユーザーによって(despatcherサーブレットを介して)直接呼び出され、レスポンスはJSONとして返されます。私は注釈によるコントローラの使用は非常に便利だと思いますが、私は各コ​​ントローラで非常に退屈な例外を見つける。例外は常に同じで、各例外に対する応答も同じです。したがって、各コントローラではなく1回だけ捕捉する方法を定義できますか? 私はフィルタのようなものを考えていましたが、これは良い考えではないかもしれません...何かヒント?コントローラの例外捕捉を簡略化する

は今私のコントローラは、次のようになります。あなたが探しているもの

@Controller 
@RequestMapping("/do") 
@PreAuthorize("hasRole('ROLE_USER')") 
public class UselessController { 

@SuppressWarnings("rawtypes") 
@RequestMapping(value = "/foo", method = RequestMethod.GET) 
@PreAuthorize("#bar == principal.bar") 
public ResponseEntity foo(@RequestParam int bar) { 

    try { 
     //do something 
    } catch (SomeTypeOfException stExc) { 
     return new ResponseEntity(HttpStatus.FORBIDDEN); 
    } catch (NoResultException nrExc) { 
     return new ResponseEntity(HttpStatus.PRECONDITION_FAILED); 
    } catch (Exception exc) { 
     return new ResponseEntity(HttpStatus.METHOD_FAILURE); 
    } 

    return new ResponseEntity(HttpStatus.OK); 
} 

答えて

4

HandlerExceptionResolverです。必要なのは、最も一般的な例外のための単なるリゾルバです。インターフェイスを実装してください(いくつかの既成の実装もあります。「ドキュメント内の「すべての既知の実装クラス」を参照してください)、コンポーネントとして注釈を付けて起動時にピックアップします(少なくとも私はこれを別々に登録する必要があることを思い出しません)。より細かい制御が必要な場合は、独自のHandlerExceptionResolverでコードを使用するか、SimpleMappingExceptionResolverを作成して、さまざまな例外を独自のエラービューにマップできます。通常はxml-configを使用して行います。

関連する問題