2011-06-10 17 views
2

私は春はこのようなメソッドを持つオブジェクトへの私のJSON POST送信を変換することができます:JSON投稿オブジェクトでJSR-303検証を取得していますか?

@RequestMapping(value = "/doSomething", method = RequestMethod.POST) 
public ResponseEntity<String> doSomething(@RequestBody SomeUsefulPojo usefulPojo) { 
     // use the useful pojo, very nice 
    } 

私は、すべてのアプリケーションコンテキストの魔法を設定することで、として私のポストメソッドを作成することにより、JSR-303の検証を得ることができますなどと形式でエンコードされた値を使用して提出:

@RequestMapping(value = "/doSomething", method = RequestMethod.POST) 
public ResponseEntity<String> doSomething(@Valid SomeUsefulPojo validPojo) { 

     // use validPojo, I'm happy 
} 

問題は、第1には、私はJSONのに手渡したいのに対し、フォームでエンコードされたアプローチを使用するように見え、ある両方の長所を取得する方法。 - 検証とjson POST?私は@Validと@RequestBodyを一緒に試しましたが、そのように検証は呼び出されません。

アイデア?

+0

バグが明らかですv3.1で固定M2 [リンクされたソリューション] [1] [1]:http://stackoverflow.com/a/7811192/41223 – tzrlk

答えて

1

最初の方法を使用して、手動でパラメータを検証します。

import javax.validation.Validator; ... 

@Resource 
Validator validator; 

@RequestMapping(value = "/doSomething", method = RequestMethod.POST) 
public ResponseEntity<String> doSomething(@RequestBody SomeUsefulPojo usefulPojo) { 
    Set<ConstraintViolation<?>> cvs = validator.validate(usefulPojo); 
    if (!cvs.isEmpty()) throw new ConstraintViolationException(cvs); 
    ... 
} 

あなたBindResultにエラーをバインドする必要がある場合は、あなたがここにアプローチを試みることができる:ここ

http://digitaljoel.nerd-herders.com/2010/12/28/spring-mvc-and-jsr-303-validation-groups/

その他のアイデア:

http://blog.jteam.nl/2009/08/04/bean-validation-integrating-jsr-303-with-spring/

+0

[OK]を、それは私が取ったアプローチだ - 私は右によ見てうれしいですトラック。 –

+0

初めてのあなたのためにはうまくいかなかった春のバグのようです。私はJSONを使用しませんが、JSR-303が@Validのグループをサポートしていないなどの理由で、このマニュアルの検証パターンに従っています。 –

関連する問題