2012-02-08 32 views
3

Javaで一般的に型指定されたクラスがあります。 jsonを受け取った後にT型のオブジェクトを返すことになっています。私は、オブジェクトを作成するには、次のコードを使用しています:JsonMappingExceptionがスローされないときにスローされない

ObjectMapper mapper = new ObjectMapper(); 
this.object = mapper.readValue(json, type); 

この方法はJsonMappingExceptionをスローし、オブジェクトのタイプが適切でない場合には、そうすべきです。私が実行している問題(ユニットテスト時)は、誤った型のjsonを渡すと、両方のオブジェクトがpojosである限り、例外はスローされません。私は単に、すべてのフィールドがnullである正しい型のオブジェクトを取得しています。

ここで例外がスローされないのはなぜですか?オブジェクトの型に存在しないフィールドの束をいくつかjsonに渡してマッピングする必要がありますが、例外はありませんか?

+2

'@JsonIgnoreProperties(ignoreUnknown = true)'を設定していますか? – beerbajay

+0

これは本当の答えです...私はそれを受け入れることができるようにこれを答えとして書くことができますか? – Craig

答えて

2

あなたはおそらく持っている:

どこかに設定
@JsonIgnoreProperties(ignoreUnknown = true) 

ので、ジャクソンは不一致文句はありません。

+0

私は@JsonIgnoreProperties(ignoreUnknown = true)をどこにも持っていませんが、JunitsのJsonMappingExceptionでアサートしてもAssertionFailureを取得します。 com.fasterxml.jackson.databind.JsonMappingExceptionのインスタンス。java.lang.IllegalArgumentException:nameがnull、空でないか欠けている可能性があります。>がjava.lang.IllegalArgumentExceptionの場合 – Gnana

+0

FYI:nameがnullの場合、IllegalArgumentExceptionをスローします。しかし、COMでJsonMappingException com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:210) \tを投げるとは別のPOJOのための私の他のデシリアライザ、魔法のようにJsonMappingExceptionをスロー(でもそれはIllegalArgumentExceptionをスローします) – Gnana

+0

.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:177)com.fasterxml.jackson.databindでcom.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrowで \t(BeanDeserializerBase.java:1474) \t .deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:260) \t at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:125) – Gnana

0

JSONが予想されるタイプではないことを、Jacksonが知っているとどのように期待しますか? JSONデータには、基本的なオブジェクト/配列/スカラー構造だけではなく、型がありません。構造が互換性のあるものであれば、設計通りです。

関連する問題