2012-04-27 12 views
1

@RequestBodyを使用してjsonをモデルにバインドしようとしています。春のモデルバインディング中にJsonを検証するMVC 3.1

JSR303を使用してモデルを検証しています。必要な情報の一部が(私はドキュメントに読み込まれるように)MethodArgumentNotValidExceptionがスローされた欠落している場合はここ

メソッドシグネチャ

@RequestMapping(value = "/editCampaign.do", method = { RequestMethod.POST }) 
    public ModelAndView editCampaign(@RequestBody @Valid Campaign campaign, 
      HttpServletRequest request) 

あります。私は実際にこの情報をビューに戻すことができるようにしたいので、必要なフィールドに記入していないことをユーザーに示すことができます。例外がスローされると、それは遅すぎるように見えます。明らかに、私は検査するための拘束力を持っていません。

フレームワークを間違って使用していますか?このシナリオを正しく設定するにはどうすればよいですか?

答えて

0

まずは、特にSpring 3.1でModelAndViewの代わりにStringを返すことをお勧めします。

あなたは@ResponseBodyアノテーション付きメソッドから例外をキャッチしたい場合は、私は以下を使用することをお勧めいたします:

1)@ExceptionHandlerアノテーションで例外をキャッチ:

@ExceptionHandler(MethodArgumentNotValidException.class) 
     public String handleMyException(MethodArgumentNotValidException exception) { 
     return "redirect:errorMessage?error="+exception.getMessage()); 

       } 

し、その後で注釈が付け表示するリダイレクト@ResponseBody引数

@RequestMapping(value="/errorMessage", method=RequestMethod.GET) 
    @Responsebody 
    public String handleMyExceptionOnRedirect(@RequestParamter("error") String error) { 
    return error; 
      } 
+0

ありがとうDanny。 解決策がわかりません。これは、springタグの形式:エラータグが正しく処理されるように十分ですか? – jbenckert

+0

このソリューションは、AJAXを使用してクライアント側にエラーを返します。これは、すでにユーザーにエラーを表示する方法に依存します。実際にフォーム:フォーム送信の代わりにAJAX送信を使用しているため、フォーム送信によってトリガーされたエラー・タグ。私はあなたが正しい方法でそれを引き起こすことができるとは思わない。 –