問題タブ [jsonidentityinfo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - JsonIdentityInfo を含む JavaScript で Jackson オブジェクトを逆シリアル化する
こんにちは(私の英語でごめんなさい)
SPRING MVCでjsonを生成するWebサービスを使用するangularjsフロントエンドWebサイトに取り組んでいます。spring mvc はシリアライゼーションに JsonIdentityInfo オプションを使用するため、各オブジェクトは json に 1 回だけ書き込まれ、参照が使用されるたびに書き込まれます。たとえば、同じオブジェクト「コンポーネント」を使用する 2 つの「コンピューター」があるため、Spring は ID を配置します。最初のコンポーネント ("@componentID": 2) および 2 番目のコンポーネントの場合は id ( 2 ) :
私が欲しいもの:
これを行うコードを何度も検索しましたが、何も見つかりませんでした。
この動作を削除するために Web サービスを編集することはできません。クライアント側で json を javascript または jquery (または別のライブラリ) で編集して、参照を実際の参照オブジェクトに置き換えることはできますか? (データは実際にはより複雑で深く、オブジェクトには 3 レベルのサブオブジェクトがあります)。
どうもありがとう。
android - JsonMappingException: Objectify の OneToMany 関係での無限再帰
(4.0.3b)Google App Engine
と一緒に使用している Android アプリのバックエンドを提供します。Objectify
バックエンドには、 (友達)関係を持つ単純なUser
エンティティがあります。list of Users
たとえば、次のユーザーがデータベースに保存されている場合:user1
およびuser2
:
user1
がuser2
友達リストにいる、またはその逆
エンドポイントからUser オブジェクト (上記のサイクル参照を持つ) をフェッチしようとすると、Android クライアントは次の例外をスローします。
com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: java.util.ArrayList[0]...
この投稿Infinite Recursion with Jackson JSON and Hibernate JPA issue@JsonIgnore
では、フィールドまたは getter/setter メソッドでの使用を推奨しています。しかし、クライアント側では、(生成されたクライアント ライブラリ オブジェクトから) これらのゲッター/セッター メソッドによってフレンド リストにアクセスする必要があるため、これは役に立ちません。
もう 1 つのヒントは、 @JsonManagedReference と @JsonBackReference を使用することです。これは、私の場合は適用できず、同じフィールドを指すためです。ManagedReference
BackReference
friends
私の問題を解決できると思うのは@JsonIdentityInfo Annotation ですJackson 2.0
。
私の問題は、Google App Engine でこのアノテーションを使用する方法がわからないことです。GAE は を使用しますがjackson-core-asl-1.9.11
、残念ながら はありません。これは@JsonIdentityInfo
明らかに 2.0 未満のバージョンに依存しているためです。
Google App Engine で最新の Jackson バージョン (2.4) を使用して @JsonIdentityInfo 機能を使用する方法を知っている人はいますか?
または、私の問題に対するより良いアプローチがありますか?
json - @JsonIdentityInfo を使用する場合、Jackson による JSON シリアル化でオブジェクト参照を非表示にする
カテゴリとアイテムの 2 つのエンティティがあります。
カテゴリ エンティティ:
アイテム エンティティ:
次のような左結合クエリを実行した後: "SELECT c from Category c Left JOIN FETCH c.itemList il"
結果を取得し、結果に対して休止状態対応の JSON シリアル化を実行しました。
私の HibernateAwareObjectMapper は次のとおりです。
HibernateAwareSerializerFactory は次のとおりです。
私のディスパッチャーサーブレットでは、次のように書いています。
だから、私はこのようなJSONを持っています:
この JSON には、Category Entity のオブジェクト ID である "@id": "971ef69e-1605-46f2-8234-b595e38be11a" があります。
また、Item Entity の Object Id である "@id": "75a3a7e5-ce66-4f6d-a04c-d04145d92b21" があります。
カテゴリには 3 つのアイテムがあるため、カテゴリのオブジェクト ID もさらに 2 回表示されます。このように: "971ef69e-1605-46f2-8234-b595e38be11a","971ef69e-1605-46f2-8234-b595e38be11a"
その生成された JSON シリアライゼーションは期待どおりです。しかし、そのオブジェクト参照「@id」をそのjsonで非表示にする必要があります。この「@id」は、デフォルトで @JsonIdentityInfo によって作成されます。
したがって、オブジェクト ID「@id」を非表示にするには、@JsonIdentityInfo の構成が必要です。@JsonIgnore を試しましたが失敗しました。
解決策を求めて 2 日間グーグル検索しましたが、失敗しました。誰か解決策や提案を教えてもらえますか?
java - Spring Context でインスタンス化された JsonIdentityInfo リゾルバー
ObjectIdResolver クラスが Spring によってインスタンス化されるように、Spring/Jackson オブジェクト マッパーに ObjectIdResolver を登録するにはどうすればよいですか? ObjectIdResolver クラスで依存性注入を使用したいと考えています。
ObjectIdResolver.java
注文.java
spring-servlet.xml
java - Hibernate マッピングでの JsonIdentityInfo の使用
City と Type という 2 つのエンティティがあり、これら 2 つの間に多対多の関係があります。私が必要とするのは:
- タイプを含む City の json
- 都市を含む Type の json。
JsonIdentityInfo を使用して、マッピングからの無限再帰を停止していますが、JSON から取得したものは実際には役に立ちません。これは私が現在都市のJSONから得ているものです
しかし、私が必要とするのは次のようなものです:
Cities JSON についても同じことが言えます。双方向にする必要があります。
これは私のエンティティのコードです:
街:
タイプ: