java - BlazeD 在将数据从 flex 传递到 java 时将 int 转换为 float

标签 java apache-flex type-conversion blazeds

将 int 从 flex 传回 java 时遇到问题。有问题的 int 是一个 ID,今天早上我似乎已经达到了阈值,因为事情开始崩溃。

我在flex中通过blaze传回922927950到java。当java获取时它已经转换为9.2292795E8

我在flex中的代码是

service.getRemoteObject().sendData(objectIds);

其中对象 ids 是 ArrayCollection。在这里我可以调试并看到数字是 922927950。然后我可以调试 java 并看到它已转换为 9.2292795E8

sendData 具有以下签名

public void sendData(List<Integer> objectIds) {...}

我尝试更改 flex objectids 数组以包含数字而不是整数,但这也不起作用。据我所知,在java中要存储9.2292795E8,该数字必须是 float 。 float 确实适合java中的整数,所以我想这就是为什么我没有收到类型不匹配错误的原因。问题是 id 现在采用科学记数法,这会破坏使用它们的 jpa 查询。

有谁知道为什么数字要转换成科学记数法吗?

谢谢

更新

经过更多调查后,情况变得更加奇怪。我在我的java中尝试了以下代码

public void sendData(List<Integer> objectIds) {
    List<Integer> converted = new ArrayList<Integer>();

    for (Integer objectId : objectIds) {
        converted.add(objectId);
    }
    ...
}

我现在收到类转换异常,说我无法在 conversion.add(objectId) 行上将 double 转换为整数

 java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Integer

当我在 Flex 中将 922927950 转换为 Number(我认为它映射到 Double)时,就会发生这种情况。我的问题是我在 java 端使用泛型而 BlazeDs 不考虑这些,所以只匹配签名而没有泛型?

最佳答案

首先,看Amf3Types documentation :

The maximum value for an int that will avoid promotion to an ActionScript Number when sent via AMF 3 is 2^28 - 1, or 0x0FFFFFFF

十进制表示为 268,435,455,而 922,927,950 远远超出了此限制。请注意,这是一个序列化问题:int data type能够保存 2^31 - 1 值,就像常规的 32 位 int 类型一样。

现在,您应该用您的代码尝试一下:

public void sendData(List<?> objectIds) {
    List<Integer> converted = new ArrayList<Integer>();

    for (Object objectId : objectIds) {
        converted.add(((Number)objectId).intValue());
    }
    ...
}

如果您需要更好地控制类型转换和高级数字类型,您应该考虑使用 GraniteDS而不是 BlazeDS。请参阅文档 herehere .

问候, 弗兰克。

关于java - BlazeD 在将数据从 flex 传递到 java 时将 int 转换为 float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12214672/

相关文章:

c++ - 自动将一种 C++ 类型转换为另一种

c# - 将字符串转换为 BASE62

java - 如何使用java程序创建带有客户端公钥和私钥的PKCS#12格式文件

actionscript-3 - Flex arraycollection getitemindex 总是返回-1

apache-flex - Flex 4如何创建加密的SQLite数据库

apache-flex - adobe air vs flex vs flash builder ---我需要解释一下

c++ - 为什么我得到“从 const 指针到指针的无效转换?

java - 在保留键的同时清除 HashMap 值

java - 是否有用于选择目录和文件的 SWT 或 JFace 对话框?

java - 从父类调用扩展的类方法,扩展类保留父类变量的实例