【问题标题】:How do you return JSON from REST call?如何从 REST 调用返回 JSON?
【发布时间】: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 这根本不是真的

标签: java json rest


【解决方案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;
}

【讨论】:

猜你喜欢
  • 2021-01-31
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
相关资源
最近更新 更多