频道栏目
首页 > 资讯 > Java > 正文

jaxb绑定中的java.util.date问题

11-06-23        来源:[db:作者]  
收藏   我要投稿

在spring mvc3中JACKSON序列化日期格式的问题(http://jackyrong.iteye.com/admin/blogs/1089909)一文中,提到了相关的日期问题。同样地,如果在JAXB中,REST形式返回的话,也有这样的问题,继续看例子:

1)POJO类:
   package com.loiane.model;

import java.util.Date;

public class Company {

    private int id;

    private String company;

    private double price;

    private double change;

    private double pctChange;

    private Date lastChange;

    //getters and setters

2)现在要返回company的集合,而且要用JAXB包装
   import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="companies")
public class Companies {

    @XmlElement(required = true)
    private List<Company> list;

    public void setList(List<Company> list) {
        this.list = list;
    }
}
而在SPRING CONTROLLER中,要返回如下的:
  @RequestMapping(value="/company/view.action")
public @ResponseBody Companies view() throws Exception {}

这时,返回的XML为如下:
<companies>
    <list>
        <change>0.02</change>
        <company>3m Co</company>
        <id>1</id>
        <lastChange>2011-09-01T00:00:00-03:00</lastChange>
        <pctChange>0.03</pctChange>
        <price>71.72</price>
    </list>
    <list>
        <change>0.42</change>
        <company>Alcoa Inc</company>
        <id>2</id>
        <lastChange>2011-09-01T00:00:00-03:00</lastChange>
        <pctChange>1.47</pctChange>
        <price>29.01</price>
    </list>
</companies>
可以看到,时间格式不是很好使,于是我们自定义进行格式化一下:
package com.loiane.util;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class JaxbDateSerializer extends XmlAdapter<String, Date>{

    private SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");

    @Override
    public String marshal(Date date) throws Exception {
        return dateFormat.format(date);
    }

    @Override
    public Date unmarshal(String date) throws Exception {
        return dateFormat.parse(date);
    }
}

这里继承了XmlAdapter,并且进行了marshal和unmarshal,就是字符串日期和日期转字符,使用时,注意加上 @XmlJavaTypeAdapter 标签,如下
import java.util.Date;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

import com.loiane.util.JaxbDateSerializer;

public class Company {

    private int id;

    private String company;

    private double price;

    private double change;

    private double pctChange;

    private Date lastChange;

    @XmlJavaTypeAdapter(JaxbDateSerializer.class)
    public Date getLastChange() {
        return lastChange;
    }
    //getters and setters
}
结果就正确输出了;
<companies>
    <list>
        <change>0.02</change>
        <company>3m Co</company>
        <id>1</id>
        <lastChange>09-01-2011</lastChange>
        <pctChange>0.03</pctChange>
        <price>71.72</price>
    </list>
    <list>
        <change>0.42</change>
        <company>Alcoa Inc</company>
        <id>2</id>
        <lastChange>09-01-2011</lastChange>
        <pctChange>1.47</pctChange>
        <price>29.01</price>
    </list>
</companies>

相关TAG标签
上一篇:JAVA中IP和整数相互转化介绍
下一篇:查看订单-REST的流程API设计案例(2)
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站