Today, I use the spring hessian to transfer the BigDecimal value but when I get the value on server is zero, there are two ways to resolve:
first:adding files META-INF/hessian/serializers with "java.math.BigDecimal=com.caucho.hessian.io.StringValueSerializer" and META-INF/hessian/deserializers with "java.math.BigDecimal=com.caucho.hessian.io.BigDecimalDeserializer".
second:build our own SerializerFactory but we do not return com.caucho.hessian.io.BigDecimalDeserializer because it is not checking for null.
public class BigDecimalSerializerFactory extends AbstractSerializerFactory {
private BigDecimalSerializer bigDecimalSerializer = new BigDecimalSerializer();
private BigDecimalDeserializer bigDecimalDeserializer = new BigDecimalDeserializer();
@Override
public Serializer getSerializer(Class cl) throws HessianProtocolException {
if (BigDecimal.class.isAssignableFrom(cl)) {
return bigDecimalSerializer;
}
return null;
}
@Override
public Deserializer getDeserializer(Class cl) throws HessianProtocolException {
if (BigDecimal.class.isAssignableFrom(cl)) {
return bigDecimalDeserializer;
}
return null;
}
To use this you have to do this both, on server side and client side:
HINT! In
our case we have had a combined problem with BigDecimal and DateTime. Thus stacktraces and the debug views were weird. So if you use "non-standard" objects check them for their serialization!
本文介绍了在使用Hessian进行远程调用时遇到BigDecimal值传输为零的问题,并提供了两种解决方案:一是通过配置文件指定自定义的序列化和反序列化器;二是自定义SerializerFactory来处理BigDecimal类型的序列化和反序列化。

9万+

被折叠的 条评论
为什么被折叠?



