Eri*_* B. 10 java spring jaxb adapter
我在我写的WebService中使用Spring 3 IOC和JAXB/JAX-WS.我现在有一个小问题,数据必须在返回消费者之前进行舍入,因为他们无法处理值的完整精度.
为了最小化对WS设计和计算的影响,我选择使用Jaxb XmlAdapter在编组响应时对值进行舍入.一切正常.
我现在的问题是我想让它变得灵活.即:在某些情况下,我需要舍入到2个小数位,大约4个等等.现在,我必须创建一个TwoDecimalAdapter和一个FourDecimalAdapter,并在模型定义中使用必要的相应位置.这意味着代码重复.
反正有没有创建一个通用的Rounding Adapter,并传递一个参数给它?例如,而不是:
@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(value=FourDecimalRoundingAdapter.class,type=java.math.BigDecimal.class)
Run Code Online (Sandbox Code Playgroud)
我希望能够做到这样的事情:
@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(value=new RoundingAdapter(4),type=java.math.BigDecimal.class)
Run Code Online (Sandbox Code Playgroud)
显然,这不起作用,因为JAXB实例化适配器本身,但是有什么技术可以用来将参数传递给适配器吗?我希望能够在Spring中声明舍入适配器并以这种方式使用它,但是再次,我无法设计可重用的解决方案.
谢谢,
埃里克
我不确定您如何将其与 Spring 挂钩,但下面是您可以利用的 JAXB 机制的描述。
如果您有以下情况:
@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(value=RoundingAdapter.class,type=java.math.BigDecimal.class)
Run Code Online (Sandbox Code Playgroud)
然后使用独立的 JAXB API,您可以执行以下操作。下面的代码意味着每当RoundingAdapter遇到 时,都应该使用指定的实例。
marshaller.setAdapter(new RoundingAdapter(4));
unmarshaller.setAdapter(new RoundingAdapter(4));
Run Code Online (Sandbox Code Playgroud)
了解更多信息
| 归档时间: |
|
| 查看次数: |
3380 次 |
| 最近记录: |