Flex から Java に int を戻すときに問題が発生します。問題の int は ID であり、物事が壊れ始めたため、今朝はしきい値に達したようです。
flex で 922927950 を blaze を介して Java に渡しています。Javaが取得するまでに、9.2292795E8に変換されています
フレックスの私のコードは
service.getRemoteObject().sendData(objectIds);
ここで、オブジェクト ID は ArrayCollection です。これで、デバッグして番号が 922927950 であることを確認できます。次に、Java をデバッグして、9.2292795E8 に変換されたことを確認できます。
sendData には次の署名があります
public void sendData(List<Integer> objectIds) {...}
flex objectids 配列を int ではなく数値を含むように変更しようとしましたが、これも機能しません。9.2292795E8 を保存することがわかっている限り、Java では数値は float でなければなりません。フロートはJavaの整数内に収まるので、型の不一致エラーが発生しないのはそのためだと思います。問題は、ID が科学表記法になり、それらを使用する jpa クエリが壊れることです。
数値が科学表記法に変換される理由を知っている人はいますか?
ありがとう
アップデート
さらに調査すると、さらに奇妙になります。Javaで次のコードを試しました
public void sendData(List<Integer> objectIds) {
List<Integer> converted = new ArrayList<Integer>();
for (Integer objectId : objectIds) {
converted.add(objectId);
}
...
}
convert.add(objectId) 行で double を integer に変換できないというクラス キャスト例外が発生するようになりました。
java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Integer
これは、Flex で 922927950 を Number にキャストしたときに発生し、Double にマップすると推測されます。ここで私の問題は、Java 側でジェネリックを使用していて、BlazeDs がこれらを考慮しないため、ジェネリックなしで署名に一致するだけですか?