当我从这样的控制器返回单个对象时,
@ResponseBody
public MyClass module(...) {
...
}
我在客户端上获取xml输出并记录这样的显示,
2011-09-07 18:22:06,963 [qtp1409490836-27] DEBUG org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter - 将[com.domain.MyClass@4374820d]写成“application / xhtml + xml” 运用 [org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter@b4e1f3]
但如果我使用这样的列表,
@ResponseBody
public List<MyClass> module(...) {
...
}
它使用jsonConvertor并返回json输出。
2011-09-07 18:38:31,026 [qtp420370595-26] DEBUG org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter - 写成[[com.domain.MyClass@654309f0]]为 “application / json; charset = UTF-8”使用 [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter@14419f80]
MyClass使用jaxb注释。在球衣我可以说
@Produces({ MediaType.APPLICATION_XML })
如何强制spring始终使用xmlconverter?
答案 0 :(得分:1)
有一些错误意味着您无法在列表中返回您的班级。您需要创建一个新类来保存对象列表并将其返回到@ResponseBody中。像这样:
@RequestMapping(value = Constants.URL, method = RequestMethod.GET)
public @ResponseBody ListHolder getFoos(HttpServletResponse response) {
response.setContentType("application/xml");
List<Foo> foos = getFoos();
ListHolder listHolder = new ListHolder();
listHolder.setFoos(foos);
return listHolder;
}
使用@XmlRootElement注释ListHolder类,如果你有jaxb jar或Java 6,那么它应该可以工作。
答案 1 :(得分:-1)
如果Spring无法找到JSON转换器,则无法发送JSON。尝试从类路径中删除jackson.jar,对于所有请求,它应该通过XStream默认为XML。