【发布时间】:2015-12-11 09:54:16
【问题描述】:
这可能是一个愚蠢的问题,但我在网上找不到明确的答案。 我正在用 javax.ws.rs 构建一个 REST api。 我有一个看起来像这样的课程
public class Person{
private String name;
private List<Telephone> telephones;
constructor + getters + setters
}
我正在实现一个 getAllPerson REST 调用,它应该返回 json。这就是我现在正在做的事情:
Path("/persons")
@GET
@Produces({MediaType.APPLICATION_JSON})
public List<Person> getAllPersons() {
return facade.getAllPersons();
}
我认为这不是正确的做法,因为它给了我一个错误(HTTP Status 500 - Internal Server Error...)
而且我也不知道程序如何知道如何将包含另一个电话对象列表的人员对象列表转换为 JSON。
那么在 JSON 中返回这样的列表的正确方法是什么,我应该手动构建 json 字符串吗? getAllPersons() 的返回类型应该是什么?
对不起,如果这是一个非常愚蠢的问题,但我找不到对我来说很清楚的答案。 提前致谢。
编辑: 我得到的错误是:
Severe: MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList, genericType=java.util.List<com.myproject.domain.Person>.
编辑2: 我已经添加 @XmlRootElement 到我的 Person 类,我添加了一个空构造函数
我也将此添加到我的 pom 文件中:
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.6.4</version>
</dependency>
【问题讨论】:
-
在您的日志文件中查看发生了什么,如果您自己找不到解决方案,请发布堆栈跟踪
-
你需要使用一些 JSON 反序列化器,比如 Jackson。谁知道如何反序列化/序列化实体。
-
我添加了错误:)
-
您的注释说 @Produces({MediaType.APPLICATION_JSON}) 但您返回的是 Person 对象列表。您需要返回一个 JSON 对象。
-
@user567 这根本不是真的