問題タブ [autobean]
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.
java - GWT AutoBean: アノテーション @PropertyName が機能しなくなりました
AutoBeanを使用してデータを JSON にコーディング/デコードしますが、以前の GWT バージョンでは問題ありませんでした。私の意見では、AutoBean は JSON を処理するための非常に優れた便利なツールです。GWT ver.2.4.0 以降、この機能が変更されたので、時間をかけてコードで復元しました。ただし、まだ修正されていない部分は 1 つだけです - アノテーション @PropertyName です。この注釈は、プロパティに「エイリアス」を追加するために使用されます。これにより、多くのネットワーク トラフィックが節約されます。そして今、例外をスローします。コード例は次のとおりです。
次に、これを次の方法で JSON にデコードしようとします。
このコードは、レガシー コードで完全に機能しました。しかし今(GWT 2.4.0で)例外が発生します:
インターフェイスから @PropertyName を削除すると、例外は発生しません。
公式ドキュメントが更新されるのを待っていますが、古いコード例のままです。
誰かがこの問題を解決するのを手伝ってくれますか? アドバイスありがとうございます。
私はGWT版を使用しています。2.4.0、GAE版。1.6.1.
json - GWT RPC を JSON に変換
私のアプリケーションは GWT-RPC を使用してサーバーと通信します。RPCレイヤーを変更せずに、JSONを使用してデータを透過的にシリアル化する方法はありますか?
IMHOこれは、シリアライザーを変更し、UIでautobean codexを使用することで実現できます。
なぜそれが必要なのですか?
- クロスドメイン RPC 呼び出しを行いたい
- サーバー側で追加のレイヤーを提供せずに、非 GWT アプリからサーバー側を呼び出したい。
json - GWT で AutoBean を使用して不明なタイプの JSON オブジェクトを解析する
私のサーバーは JSON でオブジェクトのリストを返します。たとえば、 Cat
s またはDog
s などです。
Cat
それらがすべてs になることがわかっている場合は、AutoBeanCodex
を簡単に機能するように設定できます。種類がわからないのですが…どうすればいいですか?
すべてのエンティティに type フィールドを与えることもできますが、その場合、各エンティティを に渡す前に解析する必要がAutoBeanCodex
あります。他にどのようなオプションがありますか?
gwt - HashMapでGWTのAutoBean逆シリアル化を使用する場合のNullPointerException
GoogleのAutoBeanのシリアル化と逆シリアル化に問題があります。プリミティブ型とマップも含むAutoBeanがあります。プリミティブ型を問題なくシリアル化および逆シリアル化できますが、逆シリアル化されたマップを読み取ろうとすると、NullPointerExceptionが発生します。これまでに同様の問題に遭遇したことがありますか?私の問題を表すJUnitテストがあります。最初の2つのアサートは合格ですが、3番目は失敗します。
java - GWT Autobeans で動的 JSON データを処理するには?
現在、autobean として処理されるクラスのセットアップがあります。
Serializable の代わりに Object を使用してみました:
しかし、これはデータにアクセスしようとすると爆発するようです (「具体化」されていないため)。
メタデータ マップには、他のマップ、文字列、int などが含まれる場合があります。そのメタデータ オブジェクトの内部マップからデータを取得するにはどうすればよいですか?
現在、asset.getMetadata().get("title"); を呼び出すと、これは SerializableAutoBean を返し、そのオブジェクトに対して toString() または String.valueOf(obj) を実行すると、実際の文字列値ではなく、メモリ内オブジェクト情報が返されます。
AutoBean オブジェクトをこのように動的にすることはできますか?それとも、特にすべてのフィールドを定義する必要がありますか?
java - GWT はサーバー上のドメイン オブジェクトを手動でシリアライズします
GWT アプリがロードされたときに最初に行うことは、RequestFactory を介してサーバーから現在ログインしているユーザーを要求することです。続行する方法を知るためにユーザーのプロパティが必要なため、これはブロックされます。これには 500 ミリ秒未満しかかかりませんが、この間にアプリがブロックされるのは本当にイライラします。jsp が生成された時点でサーバー上にユーザーが既に存在するため、シリアル化されたユーザーを jsp に追加して、この要求を完全に削除してみませんか?
これを行うには2つの問題があります。
- User を UserProxy に変換する必要があります
- GWT がデシリアライズしやすい方法で UserProxy をシリアライズする必要があります。
#1を行う良い方法がわかりませんでした。このロジックは ServiceLayerDecorator に埋め込まれているように見えますが、分離する簡単な方法はありませんか? 私はここで間違っているかもしれません。
2 番目の方法はProxySerializerを使用する方が簡単に思えますが、サーバー上で requestfactory を操作するにはどうすればよいでしょうか? GWT.create
サーバー上で呼び出すことはできません。
私はAutoBeansを調べてきましたが、これは上記の #1 を処理しません。私の UserProxy には、維持したい他の EntityProxy のコレクションへの参照があります。
gwt - gwt で autobean ラッピングをサポートする理由は何ですか
私のプロジェクトで gwt autobeans の使用法を調査しています。このコンポーネントについて読んでいるときに、autobean ラッピングの概念に出くわしましたが、なぜそれが作成されたのかについての説明は見つかりませんでした。それは何のために良いですか?どこで使用できますか?
json - GWT Autobeans、ルートレベルを Map または List として解析
Autobeans はかなり強力です。それでも、私の人生では、ルートレベルの JSON マップまたはリストを処理する方法がわかりません。
ドキュメントのほとんどは、さまざまなサブオブジェクト (リストとマップを含む) を含むことができる定義済みの最上位オブジェクトがあることを示唆していますが、マップまたはリストの自動ビーン化に関するドキュメントはありません。
上記は、受信データが次のようになるリストを達成するための参考方法です。
それでも、これは見苦しいと思います。REST サービスは正しく返されるはずです。
しかし、Autobean フレームワークでこれを処理する簡単な方法が見つかりません。ルートレベルのマップについても同様です。
なぜこれが機能しないのですか?代替手段はありますか:
gwt - GWT 雰囲気 + RequestFactory
次の動作を生成したいと思います。
ブラウザのユーザーがエンティティを保存します。エンティティがサーバー側に保存されると、通知が生成され、エンティティ インスタンスが更新された Atmosphere を使用して、他のすべてのクライアントに通知する必要があります。
問題は、Atmosphere インターフェイスを介して POJO エンティティをプッシュする方法です。最後の 1 つは Serializable 型をサポートしてワイヤー経由で転送しますが、RequestFactory には別のシリアライゼーション メカニズムがあります。
そのため、POJO エンティティを autobean に変換する必要があります。これは RF によって行われ、クライアントに送信されます。どうすればできるか知っている人はいますか?
java - AutobeanとXSSの問題
Spring
バックエンドにアプリケーションGWT
があり、フロントエンドにアプリケーションがあります。ユーザーがログインすると、''index.jsp''はユーザー情報をjavascript変数として出力します。
私はAutoBeanFactory
ユーザー情報をjsonとしてエンコードおよびデコードするために使用しています。
ユーザーは登録でき、ユーザー情報はデータベースに保存されるため、JSPページでユーザー情報をエスケープして、 OWASPXSSのチートシートを防止するようにしています。
エンコーディングを行うためにesapiライブラリを使用しています。サーバー側のコードは次のようになります。
使っencodeForHTML
てみましたencodeForJavaScript()
。これは通常の文字では問題なく機能しますが、ウムラウト文字(ü、ä、ö)を使用するとすぐに問題が発生します。
この関数を使用するとencodeforHTML()
、javascript変数は次のようになります(名にはüがあることに注意してください)。
Autobeanを使用したデコードは正常に機能しますが、文字üは正しく表示されませんが、HTMLはエスケープされます(Über
)。
この関数を使用するとencodeForJavaScript()
、出力は次のようになります。
JSON文字列をデコードしようとすると、奇妙な問題が発生します。開発モード/ホストモードでは、デコードは正常に機能し、ウムラウトが正しく表示されます。ただし、本番モードでコードを実行するとすぐに、キャッチされない例外が発生します。
私は次の解決策を考えることができます:
- 入力検証(データがデータベースに保存されている場合)のみに依存し、出力エンコーディングを削除します。しかし、それは推奨されるアプローチではありません。
- ウムラウトを通常のASCII文字(ü=> ue)に置き換え、出力エンコーディングを引き続き使用します
- XSS文字をエスケープするが、ウムラウトはそのままにしておくライブラリを使用します。
フィードバックに感謝します
更新:Thomasの提案に基づいてJsoSplittable
、JSNIからaを渡し、これをAutoBeanCodex.decode
関数に渡します。本番モードでは正常に動作しますが、ホストモードでは次のNPEを取得します。
この例外の原因となるコードは次のとおりです。
Window.alert(payload)は、本番モードで正常に機能します。ホストモードでは、ステップインすると、の機能でuser.getPayload()
NPEが取得されます。nullのようですfindOriginalDeclaringClass
CompilingClassLoader.java
declaringClasses