使用带有Joda日期类型的Spring 3,ReST和XML时返回数据

时间:2011-05-12 23:53:26

标签: java spring rest jodatime

我在使用Spring 3和MVC构建的简单Web服务中遇到了一个奇怪的问题。 Web服务工作正常,我就像我想要的那样恢复XML,但是,所有Joda日期/时间类型的所有值都是空的。

所以我有一个像这样的UserDTO:

@XmlRootElement(name = "user")
public class UserDTO
{
  private String firstname;
  private String lastname;
  private LocalDate birthdate;
  ...

我有一个控制器,如:

@Controller
public class UserController
{
    @RequestMapping(value = "/user", method = RequestMethod.GET)
    @ResponseBody
    public UserDTO getUser()
    {
        UserDTO userDTO = new UserDTO();
        userDTO.setFirstname("Foo");
        userDTO.setLastname("Bar");
        userDTO.setBirthdate(new LocalDate(1980,1,1));
        return userDTO;
    }
}

我得到以下XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
  <firstname>Foo</firstname>
  <lastname>Bar</lastname>
  <birthdate />
</user>

如果我将'Accept'标题更改为application / json,我会得到日期值

{“userVO”:{“名字”,“姓氏”:“姓氏”,“生日”:[1978,12,5]}}

关于这可能是什么的任何想法?

1 个答案:

答案 0 :(得分:2)

要回答我自己的问题......以下链接让我走上了正确的道路:http://bdoughan.blogspot.com/2011/05/jaxb-and-joda-time-dates-and-times.html

基本上你必须为每种类型创建一个XmlAdapter。以下是链接中的示例:

package blog.jodatime;

import javax.xml.bind.annotation.adapters.XmlAdapter;
import org.joda.time.DateTime;

public class DateTimeAdapter 
    extends XmlAdapter<String, DateTime>{

    public DateTime unmarshal(String v) throws Exception {
        return new DateTime(v);
    }

    public String marshal(DateTime v) throws Exception {
        return v.toString();
    }

}