【发布时间】:2014-05-13 15:54:59
【问题描述】:
我有以下代码:
xwork-conversion.properties
java.math.BigDecimal=demo.BigDecimalConverter
BigDecimalConverter.java
package demo;
import java.math.BigDecimal;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class BigDecimalConverter extends StrutsTypeConverter{
@Override
public Object convertFromString(Map context, String[] values, Class clazz) {
System.out.println("BigDecimal : Converting from String : " + values[0]);
return new BigDecimal(values[0]);
}
@Override
public String convertToString(Map context, Object value) {
String str = ((BigDecimal)value).toPlainString();
System.out.println("BigDecimal : Converted to String : " + str);
return str;
}
}
TheAction.java
package demo;
//imports...
public class TheAction extends ActionSupport {
private BigDecimal bigField; //with getter and setter
public String execute() {
return SUCCESS;
}
}
struts.xml
<package name="demo" extends="json-default">
<action name="processBig" class="demo.TheAction">
<result type="json"/>
</action>
</package>
观察
当请求用一些大的小数比如"12345678901234567890.123456789123456789" 提交时,方法convertFromString 被执行并且值被转换为字符串并打印
BigDecimal : Converting from String : 12345678901234567890.123456789123456789
但是在解析响应时,不会执行方法convertToString,因为它不会在标准输出上记录预期的行。 Struts2 内部将BigDecimal 转换为String 并返回以下响应。
{"bigField":12345678901234567890.123456789123456789}
当在 JavaScript 中收到响应时,它变成了12345678901234567000,价值损失很大。
问题:
- 为什么没有调用
BigDecimalConverter.convertToString? - 有没有其他方法可以实现这一点(无需定义相应的
String字段和/或Stringgetter)?
【问题讨论】:
-
是 12345678901234567890 而不是 123456789123456789 是错字吗?
-
是的,我已经更新了问题...感谢您指出...
标签: java javascript struts2 bigdecimal struts2-json-plugin