如何让Spring将XML值正确地编组到Java日期?

时间:2010-09-21 18:49:17

标签: xml spring rest spring-mvc jaxb

我正在使用Spring 3创建一些ReST服务。在POSTing XML时,Spring处理String字段但不转换Date字段。这是一个例子:

@XmlRootElement(name = "TestObj") 
@XmlAccessorType(XmlAccessType.FIELD)
public class TestObj {

    @XmlElement(type = Date.class, name = "Birthdate")
    @XmlJavaTypeAdapter(BirthdateXmlAdapter.class)
    private Date birthdate;

    @XmlElement(type = String.class, name = "Name")
    private String name;

    // getters and setters ...
}

我想也许XmlAdapter是必需的,并根据我需要的日期格式创建一个来编组/取消编组。调用BirthdateXmlAdapter但传递空值,当然将birthdate字段设置为null。

@RequestMapping(value="/test", method=RequestMethod.POST)
public TestObj test(@RequestBody TestObj testObj) {
    logger.debug(testObj.toString());

    return testObj;    
}

这里非常简单的用例。我使用RestClient来POST XML并在我的TestObj中正确设置“name”属性,但是birthdate为null。

1 个答案:

答案 0 :(得分:1)

如果您注释如下:

import java.util.Date;
import javax.xml.bind.annotation.*;

@XmlRootElement(name = "TestObj")  
@XmlAccessorType(XmlAccessType.FIELD) 
public class TestObj { 

    @XmlElement(name = "Birthdate") 
    @XmlSchemaType(name="date")
    private Date birthdate; 

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

}

您可以生成/使用以下XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TestObj>
    <Birthdate>2010-09-22</Birthdate>
    <Name>Jane Doe</Name>
</TestObj>