Spring MVC:@ ResponseBody、415サポートされていないメディアタイプ



Spring Mvc Responsebody



解決:

StanMaxは私を正しい方向に導きます...

最初に私は設定する必要がありました@JsonManagedReferenceおよび@JsonBackReference右。 ManagedReferenceをを表す属性に設定しました 1対多 関係ですが、どうやらあなたはそれをに設定する必要があります 多くの 属性(コレクション)



ここの説明を参照してくださいhttp://wiki.fasterxml.com/JacksonFeatureBiDirReferences

@JsonBackReferenceは、参照の「後方」部分です。これは、シリアル化から省略され、前方参照の逆シリアル化中に再構築されます。



  • 注釈付きプロパティはBeanタイプである必要があります

私の場合の問題は、Hibernateの要件に一致する十分な情報をJSONPOSTで送信しなかったことです。

これにより、JSONPOSTからHibernateオブジェクトを作成するための適切なフィールドが存在しないという例外が発生しました。

オブジェクトマッパーを自分で作成し、JSONを手動で逆シリアル化しようとしたテストURLを作成しました。これにより、正しいエラーメッセージがスローされます。



残念ながら、Springは415の「サポートされていないメディアタイプ」例外をスローしているようですが、これは少し誤解を招く恐れがあります。

だから将来のために。最初に手で試してみて(含まれている例を参照)、次に進みます。

ModelMap map = new ModelMap(); logger.info( 'HibernateAware'); HibernateAwareObjectMapper mapper = new HibernateAwareObjectMapper(); String jsonInput = '{' + '' id  ':' 1  '、' + '' matCountry  ':{' + '' id  ':' 1  '' + '}' + '}';発作発作= mapper.readValue(jsonInput、Seizure.class); //この行は例外をスローします

これが誰かを助けることを願っています。

よろしくJS


試すことができることの1つは、問題がJacksonのデータバインディング(休止状態オブジェクトのシリアル化に失敗する)にあるのか、それとも他の何かにあるのかを把握することです。これは、ObjectMapperを手動で作成し、「mapper.serializeValueAsString()」が機能するかどうか、または例外をスローするかどうかを確認することで実行できます。

レイジーロードされたプロパティのジャクソン処理に関係している可能性は十分にあります。その場合、Hibernate固有の詳細を処理できるため、jacksonhibernateモジュールを使用する必要がある場合があります。


私も同じ問題を抱えていました。 MappingJacksonHttpMessageConverterがどのように機能するかを読んだ後、正しく初期化されていないことに気付きました。だから私はrest-servlet.xmlで以下を使用し、それは機能しました。