你如何从REST调用中返回JSON?

时间:2015-12-11 09:54:17

标签: java json rest

这可能是一个愚蠢的问题,但我无法在网上找到明确的答案。 我正在用javax.ws.rs构建一个REST api。 我有一个看起来像这样的课程

public class Person{

    private String name;

    private List<Telephone> telephones;

    constructor + getters + setters
}

我正在实现一个应该返回json的getAllPerson REST调用。这就是我现在正在做的事情:

Path("/persons")
@GET
@Produces({MediaType.APPLICATION_JSON})
public List<Person> getAllPersons() {
    return facade.getAllPersons();
}

我不认为这是正确的方法,因为它给我一个错误(HTTP Status 500 - Internal Server Error ...)

而且我也不知道程序如何知道如何将包含另一个电话对象列表的人物对象列表转换为JSON。

那么在JSON中返回类似列表的正确方法是什么,我应该手动构建json String吗?那个getAllPersons()的返回类型应该是什么?

很抱歉,如果这是一个非常愚蠢的问题,但我找不到一个对我来说很清楚的答案。 提前谢谢。

编辑: 我得到的错误是:

Severe:   MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList, genericType=java.util.List<com.myproject.domain.Person>.

EDIT2: 我已经添加 @LmlRootElement到我的Person类,我添加了一个空构造函数

我还把它添加到我的pom文件中:

<dependency>
     <groupId>com.fasterxml.jackson.jaxrs</groupId>
     <artifactId>jackson-jaxrs-json-provider</artifactId>
     <version>2.6.4</version>
 </dependency>

1 个答案:

答案 0 :(得分:-1)

正如您正确猜到的那样,当您没有返回JSON时,您会收到内部错误。您需要使用必要的数据创建并返回JSON对象。您可以通过两种方式在Java中创建JSON:

  • 使用JSON对象
  • 将类序列化为JSON对象

创建JSON对象的示例方法是:

import org.json.simple.JSONObject;
JSONObject sampleJSON= new JSONObject();
sampleJSON.put("name", "Hello");
sampleJSON.put("age", 23);

要返回JSON对象,请使用:

Path("/persons")
@GET
@Produces({MediaType.APPLICATION_JSON})
public JSONObject returnJSONData() {
    JSONObject sampleJSON= new JSONObject();
    sampleJSON.put("name", "Hello");
    sampleJSON.put("age", 23);
    return sampleJSON;
}