2012-02-28 77 views
1

我们目前正在使用支持application/xml和application/json的spring web服务,它的工作正常。一项新服务需要返回一个XML字符串。该字符串必须保存为XML,但我发现application/json也在序列化字符串的内容。有什么办法可以防止这种情况发生?Spring REST 3和JacksonMapper for JSON

编辑:

//dto: 
@XmlRootElement(name="mydata") 
public class MyData { 
    private String someData; 
    @XmlElement(required = true) 
    private String content; 
    @XmlElement 
    public String getSomeData(){ 
     return someData; 
    } 
    public String getContent() { 
     return content; 
} 
    //setter and other fields... 
} 

从上面的内容字段是在我班上的XML字符串。我想要返回内容字段但不能序列化。这可能吗 ?

+0

你是什么意思“返回但没有序列化”到底是什么?你能向我们展示你想从控制器获得的示例输出(带有内容类型)吗? – 2012-02-28 12:28:23

+0

@Adam Jurczyk。 “content”字符串包含一个当前被转换为JSON的XML字符串。我希望字符串保持XML格式。 – user815809 2012-02-28 16:00:41

+0

这很奇怪^^所以,你说整个''MyData''被序列化为XML,但内容(已经序列化为XML)被转换为JSON? – 2012-03-01 08:24:03

回答

0

如果你想返回XML,那么这个注释添加到服务:

@RequestMapping(method = RequestMethod.POST, value = "xyz", headers = "Accept=application/xml") 
+0

谢谢。我的问题可能更难以理解。我不想总是返回XML,我只想将返回的对象的一个​​字段限制为XML。编辑反映的问题。 – user815809 2012-02-28 12:15:04

+0

避免在你不希望转换发生的字段上使用setter和getter方法,它对我有用 – 2012-02-28 13:26:33

+0

现在,我收到了你的问题。我认为不可能同时返回两个版本的数据封送和计划。 – 2012-02-28 14:00:55

0

如果这个字符串就是序列化的对象(就像JSON与@ResponseBody),比你需要的一切是jackson-jaxrs lib和标记回归豆javax.xml.bind.annotation.*注释:

//in controller: 
@RequestMapping 
public @ResponseBody MyData getMyData(){ 
    MyData md = new MyData(); 
    //... 
    return md; 
} 

//dto: 
@XmlRootElement(name="mydata") 
public class MyData { 
    private String someData; 
    @XmlElement 
    public String getSomeData(){ 
     return someData; 
    } 
    //setter and other fields... 
} 
+0

谢谢。我已经用示例代码编辑了主要问题,以反映我正在尝试实现的内容。 – user815809 2012-02-28 12:19:25