Spring MVC @ResponseBody返回一个List

我们想创建一个“WebService”,它返回特定对象的列表。 我们想通过apache http客户端库从另一个java程序中调用这个web服务。

此时,如果我们从Firefox调用Web服务,则会出现406错误页面。

我们是否必须使用JSON或XML来传输列表? 怎么做,以及如何使用apache http客户端获取列表?

谢谢。


[编辑]

唯一有效的方法是使用JAXB注释创建一些实体,以便序列化为XML。

@XmlRootElement(name = "person") public class Person { private String id; public String getId() { return id; } public void setId(String id) { this.id = id; } } @XmlRootElement(name = "persons") public class PersonList { @XmlElement(required = true) public List persons; public List getData() { return persons; } public void setData(List persons) { this.persons = persons; } } @RequestMapping(value = "/hello.html", method = RequestMethod.GET, produces = "application/xml") @ResponseBody public ResponseEntity hello() { PersonList test = new PersonList(); List rep = new ArrayList(); Person person1 = new Person(); person1.setId("1"); Person person2 = new Person(); person2.setId("2"); rep.add(person1); rep.add(person2); test.setData(rep); // return test; HttpHeaders responseHeaders = new HttpHeaders(); List medias = new ArrayList(); medias.add(MediaType.ALL); responseHeaders.setAccept(medias); return new ResponseEntity(test, responseHeaders, HttpStatus.OK); } 

我尝试使用产生并直接返回对象,但仍然是错误406.XML + ResponseEntity工作。

这很奇怪,因为我看到一个非常简单的例子,将对象转换为json并出现在Web浏览器中。

所以,现在我必须了解如何获得响应并将XML转换为实体……

是的,当您的控制器方法使用@ResponseBody注释时,Spring @ResponseBody返回的数据转换为JSON 。

@ResponseBody注释告诉Spring我们将在响应主体中返回数据而不是呈现JSP。

使用@ResponseBody注释时,Spring将以客户端可接受的格式返回数据。 也就是说,如果客户端请求有一个标头来接受json并且类路径中存在Jackson-Mapper,那么Spring将尝试将返回值序列化为JSON。 如果请求头指示XML为可接受( accept=application/xml )并且Jaxb在类路径中并且返回类型使用Jaxb注释进行注释,则Spring将尝试将返回值编组为XML。

@ResponseBody将根据请求的Accept标头以及类路径中JSON和/或XML库的存在,自动将您返回的对象编码为适当的格式。

定义您自己的对象以包装列表可能更容易/更安全,而不是直接返回列表 – 因为这可以让您更好地控制编码,并允许您将来可能添加其他数据。

在2天内,我尝试了很多方法: – responseEntity – httpheaders – XML等…

对于JSON(默认行为),项目需要一个包含所有Spring库的库。 这里是在Maven项目中声明的库。

  org.codehaus.jackson jackson-mapper-asl 1.7.1  

没有这个库,我有一个错误(406)。

无论如何,谢谢您的所有答案和建议。

您应该使用ResponseEntity@ResponseBody绝对无法控制响应。

您可以使用spring mvc框架构建REST服务。 它将返回JSON / XML。 并使用HTTP客户端/ rest模板调用这些服务,并使用返回的JSON显示信息。

Spring控制器也可以返回一个对象,对象列表。 一些映射(Jackson和JAXB)将允许它将对象转换为JSON / XML。

如果您的服务接受请求数据,您可以将对象发送到服务并获取响应数据。

您也可以使用Grails框架。

实际上,您必须使用带有JSON / XML格式作为对象表示的REST Web服务。 我更喜欢JSON,因为它的重量非常轻。

首先,您需要在Pom.xml中添加依赖项

  org.codehaus.jackson jackson-mapper-asl 1.7.1 

你的方法处理程序在这里

  @ResponseBody @RequestMapping(value = "/your URL") public ArrayList getInboxPage(@RequestParam int var,HttpSession session) { ArrayList fooList=new ArrayList(); fooList.add(1L); fooList.add(2L); fooList.add(3L); return fooList; } 

注意:如果在方法处理程序中编写@ResponseBody批注,则Spring会自动生成JSON,您不需要在pom.xml文件中添加Jackson依赖项。