【问题标题】:How to return An arraylist in Rest Webservice如何在 Rest Webservice 中返回一个数组列表
【发布时间】:2017-05-21 23:23:28
【问题描述】:
//Main service 

@Path("/test")
public class ReturnMultiple {

    public static ArrayList<String> al = new ArrayList<String>();

    @POST
    @Path("/new/{name}")
    @Produces(MediaType.TEXT_PLAIN)
    public ArrayList<String> display(@PathParam("name") String name) {
        al.clear();
        Todo td = new Todo();
        td.setName(name);
        al.add(td.getName());
        return al;
    }
}

// This is Pojo

public class Todo {

    private String name;

    public void setName(String name) {

        this.name = name;
    }

    public String getName() {
        return name;
    }

}

每当我点击服务时,我都会收到以下错误

Java 类 java.util.ArrayList 和 Java 的消息正文编写器 类型 java.util.ArrayList 和 MIME 媒体类型 未找到文本/纯文本

【问题讨论】:

  • 这个静态arraylist不是个好主意,如果/test/new/name的两个请求同时到达会怎样?
  • 关于错误信息,使用的框架不知道如何从ArrayList 生成文本,这就是问题
  • 在@produces 中写什么?
  • MediaType.XML 或 MediaType.JSON(类似)
  • 当我在 @produces 中使用 Application_Json 时,它给了我这个错误 Java 类 java.util.ArrayList 和 Java 类型 java.util.ArrayList 的消息正文编写器,以及未找到 MIME 媒体类型 application/json

标签: java rest


【解决方案1】:

您不能使用 ArrayList 并生成 TEXT_PLAIN。您必须使用 JSON。要在 jax-rs 中设置 JSON 消息正文写入,您需要为 ObjectMapper 提供 @Provider。 Here's an example:

【讨论】:

    【解决方案2】:

    我想,你需要一个映射器实现来帮助序列化和反序列化。没有它,它不知道如何将 arraylist 转换为 text/plain 或 application/json 或任何其他 MIME 类型。

    如果您正在处理 application/json,jackson 库可以作为非常好的映射器。它有 messagebodyreader 和 messagebodywriter 供您完成艰巨的工作。

    您可能有办法为您的休息服务(作为提供者)提供映射器,在某些实现中,如果您使用我记得在使用 resteasy 时使用的 jackson jar,它会自行选择。

    【讨论】:

    • 我是新来的,请问你可以为mapper写一个代码吗?谢谢
    • 在大多数情况下,当您包含 jackson jar 时,会自动注册 github.com/FasterXML/jackson-jaxrs-providers,如链接所示,因此可能不需要代码,否则这里是带有球衣 mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson 的示例/跨度>
    • 我已经包含了这些罐子,并写如下:@POST @Path("/new/{name}") @Produces(MediaType.APPLICATION_JSON) public ArrayList display(@PathParam("名称") 字符串名称) { al.clear();待办事项 td = new Todo(); td.setName(名称); al.add(td.getName());返回 al; }
    • 您仍然面临同样的问题吗?我不确定你在使用什么 jor jax-rs?是 jersey、resteasy、cxf、restlet,你能在问题中列出你的 jar 吗?
    • jax-rs ,我使用了 Gson ,我能够得到输出,但现在我想知道如何将这个数组列表和两个布尔值放入哈希图中并返回哈希图跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2014-01-08
    • 2014-05-24
    相关资源
    最近更新 更多