2017-12-22 13 views
1

私はサービスとWebのプロジェクトが異なります。私は、特定の例外がサービスから来るときをどのように処理するかを知りたいと思います。Rest APIの例外処理

UI側で
public void serviceFunction() 
{ 
try 
{ 
//code 
}catch(DuplicateDataException e) 
{ 
return Response.status(Response.Status.INTERNAL_SERVER_ERROR) 
        .entity(e.getMessage()).build(); 
}} 

:コントローラクラスは、私は内部サーバーエラーを取得していますREST APIのUI側で

@RequestMapping(value = "/addNew", method = RequestMethod.POST) 
    public ModelAndView addNew(Object obj) { 

try { 
      restTemplate.exchange(url, HttpMethod.POST, httpEntity, 
        Object.class); 
      LOGGER.info("Object Created Successfully"); 
     } catch (Exception e) { 
return ModelAndView("PageName", "param","value"); 
} 
} 

を通じてサービス機能を呼び出している、サービス側で、例えば以下のように私はDuplicateDataExceptionを処理しています代わりに、サービス側で設定されたエンティティエラーメッセージ値を取得したいと思います。

+0

:次に、あなたのコントローラのすべてのグローバルexceptionHandlerのを定義するなど、独自のエラーページを返すことができますか? – Makoto

+0

私はBAD_REQUESTでも試しましたが、戻り値はModelAndView( "PageName"、 "param"、 "value")の同じキャッチブロックになります。私は、サービス側の返信応答のエンティティに設定されたメッセージとして「価値」が必要です。 – anju888

+0

可能な複製:https://stackoverflow.com/q/35323174/1079354 – Makoto

答えて

0

サービスコードで例外をキャッチし、またはJavaのRuntimeExceptionを拡張する自己定義の例外をスローします。あなたは可能性が高いの4xxクラスのエラーだ何かのための5xxクラスのメッセージを送信しているのはなぜ

@ControllerAdvice 
public class MyExceptionHandler { 

    @ResponseStatus(HttpStatus.NOT_FOUND) 
    @ExceptionHandler(Exeption.class) 
    public ModelAndView handleFileNotFoundException(Exception exception){ 

    ModelAndView modelAndView = new ModelAndView(); 

    modelAndView.setViewName("yourView"); 
    modelAndView.addObject("exception", exception); 

    return modelAndView; 
} 

}