2011-05-12 31 views
2

我在使用Spring 3和MVC構建的簡單Web服務中遇到了一個奇怪的問題。 Web服務工作正常,我按照自己的想法獲取XML,但是,所有Joda日期/時間類型的所有值均爲空。在Joda日期類型中使用Spring 3,ReST和XML時返回數據

所以我有一個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

以及您如何將userDTO映射到XML? – 2011-05-13 01:35:41

+0

它使用@XmlRootElement註釋AFAIK通過JAXB和Spring 3自動發生。我只需添加JSON支持就可以將Jackson json lib添加到我的類路徑中 – 2011-05-13 13:58:42

回答

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(); 
    } 

} 
相關問題