2016-11-18 6 views
0

私はKotlinの春にデータモデルを検証するソリューションを探しました。しかし、できません。 以下はタグdata classです。MongoDBでスプリングバリデーションを使用できません

data class Tag(@field:NotNull var name: String) { 
    lateinit @Id var id: ObjectId 
} 

私は豆の検証私の知識を1として

@Configuration 
open class ValidatorConfig { 
    @Bean 
    open fun validator() = LocalValidatorFactoryBean() 
} 

を使用するように設定を有効にしている、春ブーツは、自動的にすべてのビーンの設定をロードします。空のJSONでポストするとき、実行時に、適切な検証エラーがスローされている必要がありますが、次のエラーがスローされ

Instantiation of [simple type, class kagaz.sano.model.Tag] value failed for 
JSON property name due to missing (therefore NULL) value for creator parameter 
name which is a non-nullable type\n at [Source: 
[email protected]; line: 3, column: 1] 
(through reference chain: kagaz.sano.model.Tag[\"name\"]) 
+0

あなたの特性は、String型です。したがって、Kotlinはnullを格納することを許可しません。そして、nullかどうかバリデーターにチェックさせます。ストリングが必要ですか?それのために。 –

+0

しかし、String?を使用すると、データは検証なしでDBに格納されます。 –

+0

設定がロードされたことを確認しましたか?検証をトリガするコード/注釈はどこにありますか? –

答えて

0

春は、フィールドやプロパティの値です検査することでobjectsを検証します。 objectを検証するには、まずそれを作成する必要があります。 JSONのデシリアライザは、入力を解析し、それが問題に遭遇したとの報告Tagインスタンスを作成しようとすると:

春の検証もそのを開始するため[simple type, class kagaz.sano.model.Tag]値のインスタンス化がために JSONのプロパティ名に

を失敗しましたオブジェクトのインスタンスが必要です - たとえそれがであっても無効ですです。

これは、それがそうのようなバリデータで検査することができるように、無効な状態でオブジェクトを作成するためのJSONデシリアライザを可能にする必要がありますことを意味します

data class TagDto(@get:NotNull var name: String? = null) { 
    @get:NotNull var id: ObjectId? = null 
} 
+0

私はあなたのソリューションを試しましたが、空のPOSTを与えたときには、検証をバイパスしてレコードを保存します。 –

+0

@SharadCodesはあなたのコントローラーの方法を教えてくれます – miensol

+0

どうやら問題はmongodbにありました。だから、私は[ここ](http://stackoverflow.com/a/22583492/3236751)から解決策を取った。とにかくありがとう。 –

関連する問題