复杂dto(包括对象以及对象集合)转化为 xml,json,并发送xml,json,soap格式的报文

##前言
因项目需要,需要将一个复杂的对象(包括对象及对象集合)转化为json,xml.并组装通过HttpClient发送post请求的json,xml,soap格式报文。在解析xml时选择采用JAXB,能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON。
##dto对象(包括对象以及对象集合)
《一》相关注解详解:
①:@XmlRootElement(name = “orderRelease”) 注解是指定xml的根节点,作用在类上
②:@XmlAccessorType
@XmlAccessorType 用于指定有java对象生成xml文件时对java对象属性的访问方式。 它的属性值是XmlAccessType的四个枚举值。分别是:
XmlAccessType.FIELD
其中XmlAccessType.FIELD java 对象中的所有成员变量
XmlAccessType.PROPERTY java对象中所有通过getter/setter 方式访问的成员变量。
XmlAccessType.PUBLIC_MEMBER java 对象中所有的public 访问权限的成员变量和通过getter/setter方式访问的成员变量 。
XmlAccessType.NONE java对象的所有属性都不映射为XML元素
(注:在我们这里我只用到了XmlAccessType.FIELD)
③:@XmlType(propOrder = { “orderMain”, “orderItemList”}) 因为xml在默认情况下,Jaxb编组出来的xml中的字段顺序是随机的,你可以使用@XmlType的propOrder属性来指定序列化的顺序。
④:@XmlElement该注解用在java类的属性上。用于将属性映射为xml的子节点,可通过在后面配置name属性值类改变java属性在xml文件中的名称。例如:

@XmlElement(name = "orderMain")
private OrderMain orderMain;

@XmlElementWrapper(name="orderItems")
@XmlElement(name = "orderItem")
private List<OrderItem> orderItemList;

最后需要注意的是集合以及子对象里也会用到上述注解,请大家自行查看。
⑤:@XmlAccessorOrder
用于对java 对象生成的xml元素进行排序。它有两个属性值:
  AccessorOrder.ALPHABETICAL:对生成的xml元素按字母顺序排序;
 XmlAccessOrder.UNDEFINED:不排序
⑥:@XmlTransient
用于标示在由java对象映射xml时,忽略此属性。即,在生成的xml文件中不出现此元素。
⑦:@XmlElementWrapper
在注解最外面再加一层,可用于POJO中包含List的属性中
《二》dto对象(省略get,set方法)

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "orderRelease")
@XmlType(propOrder = { "orderMain", "orderItemList","projectCode"})
public class OrderRelease {

    @XmlElement(name = "orderMain")
    private OrderMain orderMain;

    @XmlElementWrapper(name="orderItems")
    @XmlElement(name = "orderItem")
    private List<OrderItem> orderItemList;


    @XmlElement(name = "projectCode")
    private String projectCode;

《三》dto对象里的javaBean对象(省略get,set)

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {"id","messageId","orderName","orderCode","orderRemark","orderPublishTime","orderPublishTimeBegin","orderPublishTimeEnd","createUserName","createUserCode","orderTotalPrice","arriveTime","arriveTimeBegin","arriveTimeEnd","addressUserName","addressName","addressPhone","supplierId","supplierName","supplierUserName","supplierPhone","orderSource","projectName","cargoDismantleComment"})
public class OrderMain implements java.io.Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
     * @描述:主键id     
     * @字段:id BIGINT(19)  
     */
	@XmlElement
	private Long id;

	/**
     * @描述:消息ID     
     * @字段:message_id BIGINT(19)  
     */
	@XmlElement
	private Long messageId;

	/**
     * @描述:订单名称     
     * @字段:order_name VARCHAR(100)  
     */
	@XmlElement
	private String orderName;

	/**
     * @描述:订单编号     
     * @字段:order_code VARCHAR(50)  
     */
	@XmlElement
	private String orderCode;

	/**
     * @描述:订单备注     
     * @字段:order_remark VARCHAR(500)  
     */
	@XmlElement
	private String orderRemark;

	/**
     * @描述:订单发布时间     
     * @字段:order_publish_time DATETIME(19)  
     */
	@XmlElement
	@XmlJavaTypeAdapter(DefaultDateXmlAdapter.class)
	private java.util.Date orderPublishTime;

	
	/** 非数据库字段,查询时使用 */
	@XmlElement
	@XmlJavaTypeAdapter(DefaultDateXmlAdapter.class)
	private java.util.Date orderPublishTimeBegin;
	
	/** 非数据库字段,查询时使用 */
	@XmlElement
	@XmlJavaTypeAdapter(DefaultDate
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值