<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
dfd
111
234
sdd
想用jaxb实现java对象和xml的转换,xml的格式如上,在定义pojo类时可以定义一个Resulst类其中包括code、msg属性,一个service类,然后包括result、cash、commission、orderNo属性。。不过现在是想把result作为service的属性定义成String类型,不去单独定义类,该如何实现这种转换??求指导。。
首先,你这个思想就违背了jaxb的意愿。既然你不想定义result这个类,那你service中的属性都可以不用定义了,直接使用XmlJavaTypeAdapter这样大的注解去marshal、unmarshal对象xml就行了。一般使用jaxb,如果属性为某个类库中定义的类,而需要转换为xml时,通过XmlJavaTypeAdapter来进行特殊处理。如插件开发中,元素属性为:org.eclipse.draw2d.geometry.Rectangle(矩形)时,通过XmlJavaTypeAdapter转换,如下所示:
[code="java"]
import javax.xml.bind.annotation.adapters.XmlAdapter;
import org.eclipse.draw2d.geometry.Rectangle;
public class LayoutXmlAdapter extends XmlAdapter
{
@Override
public String marshal(Rectangle v) throws Exception
{
if(v == null) return "";
return v.x + "," + v.y + "," + v.width + "," + v.height;
}
@Override
public Rectangle unmarshal(String v) throws Exception
{
if(v != null && v.trim().length() > 0)
{
String[] ps = v.split(",");
if(ps.length ==4)
{
int x = Integer.parseInt(ps[0]);
int y = Integer.parseInt(ps[1]);
int width = Integer.parseInt(ps[2]);
int height = Integer.parseInt(ps[3]);
return new Rectangle(x, y, width, height);
}
}
return new Rectangle(0, 0, 0, 0);
}
}
[/code]
如果你非要不定义result类,直接转换为:
dfd
那你可以使用XmlJavaTypeAdapter注解。
是要在不修改XML的前提下,修改Bean的结构吗?
这样做好像有点违背java对象和xml相互对应转换的原则。
可以把result这个bean留着,在service类的setResult(Result result)方法中,做一些处理,比如把result中的code、msg和自己的值set给service实例的变量就行了,然后把getResult()方法改成返回String类型的result的值。
service类的两个方法:
[code="java"]public String getResult() {
return this.resultStr;
}
public void setResult(Result result) {
this.resultStr = result.getResultValue(); //这就是result节点的文本值:dfd
this.code = result.getCode();
this.msg = result.getMsg();
}[/code]
result本身有两个属性,code和msg。
如果result变成String型,打算怎么处理这两个属性呢?
1.用String数组?
[code, msg]这样
2.分成service两个String类型属性。
resultCode
resultMsg
3.拼成一个String,定长或分隔符比如逗号。
分隔符时还得保证Msg里面别有分隔符
无论如何,单单从已知的信息来说,有个类好些吧。
不要类,可以用个Map替换。