当前位置: 首页 > 知识库问答 >
问题:

如何在JSON中返回list作为rest服务类的输出?

宗政功
2023-03-14

我最初编写了一个java应用程序(commandline app),现在我试图使用jersey和jetty Embeded将其转换为web应用程序。现在,作为服务rest类的输出,我需要以json格式输出list >> 。有没有办法做到这一点?我对servlets和其他东西的世界是新的..我这样尝试:@get@path(“test”)@produces(Mediatype.application_json)public list>>test()throws FileNotFoundException、IOException、GateException、URISyntaxException{

    System.out.println("Starting the App");
    System.out.println("Locations added successfully");
    DataFile file = new CSVDataFile();
    CommandsExecutor.outputsList.add(0, file.performReadOperation(inputFilePath));

    System.out.println("Begining execution");
    List<List<Map<String, String>>> finalOutput = CommandsExecutor.executeSequentialCommands(file);
/*  for (List<Map<String, String>> tmpList : finalOutput) { 
        for (int i = 0; i < tmpList.size(); i++) {
            Map<String, String> insideMap = tmpList.get(i);
            // for (Map.Entry<String, String> entry : insideMap.entrySet())
            // {
            // System.out.println(entry.getKey() + "/" + entry.getValue());
            // }
            JSONObject obj = new JSONObject(insideMap);
            System.out.println(obj);
        }
        System.out.println("\n");
    } */
    return finalOutput;
}  

现在我得到这样一个错误:不能发送响应错误500:javax.servlet.servletException:org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:MessageBodyWriter没有找到media type=application/json,type=class java.util.ArrayList,genericType=java.util.List>>。

周围的工作可能是什么?提前感谢!!

共有1个答案

东方俊材
2023-03-14

问题的根本原因是缺少jar。Jersey使用Jackson,所以您需要下载Jackson jars。

下面是我在一起的示例应用程序中所需的所有Jackson罐子的列表:

  • Jackson-Annotations-2.7.0.jar
  • jackson-core-2.7.0.jar
  • Jackson-DataBind-2.7.0.jar
  • jackson-jaxrs-1.9.13.jar
  • jackson-jaxrs-base-2.2.0.jar
  • jackson-jaxrs-json-provider-2.2.0.jar
  • Jackson-xc.jar
package foo;

import java.util.*;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class ListWrapper 
{
    private List<List<Map<String,String>>> list;

    public List<List<Map<String,String>>> getList()
    {
        return list;
    }

    public void setList(List<List<Map<String,String>>> list)
    {
        this.list = list;
    }
}
    package foo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;


@Path("/foo")
public class Foo  {

    @GET
    @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
    public ListWrapper getList()
    {       
        ListWrapper lw = new ListWrapper();

        HashMap<String,String> map = new HashMap<String,String>();
        map.put("foo", "bar");
        map.put("hello", "world");

        ArrayList<Map<String,String>> innerList = new ArrayList<Map<String,String>>();
        innerList.add(map);

        ArrayList<List<Map<String,String>>> outerList = new ArrayList<List<Map<String,String>>>();
        outerList.add(innerList);

        lw.setList(outerList);
        return lw;
    }
}
<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>foo,com.fasterxml.jackson.jaxrs.json</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
{
   "list": [
      [
         {
            "foo": "bar",
            "hello": "world"
         }
      ]
   ]
}

一旦您克服了识别Jersey和Jackson所有依赖项的困难,它们确实是非常强大的库。

 类似资料:
  • 从rest服务抛出的异常以某种方式返回为JSON是否可能?我有一个JAX-RS Rest服务来实现这一点。当我现在抛出它时,它被映射到一个HTML响应,这不是我想要的。据我所知,ExceptionMapper也会将其映射到HTML?是否有其他可供选择的或库允许以JSON格式返回异常?

  • 我怀疑这是我需要改变的地方,但不知道如何改变。

  • 问题内容: 我的问题实质上是对该问题的后续行动。 在上面,Spring将“ Hello World”添加到响应正文中。如何返回字符串作为JSON响应?我知道我可以添加引号,但这感觉更像是黑客。 请提供任何示例以帮助解释此概念。 注意:我不希望将其直接写到HTTP响应正文中,我想以JSON格式返回字符串(我将控制器与RestyGWT一起使用,这要求响应必须为有效JSON格式)。 问题答案: 返回(例

  • 问题内容: 早上, 我需要从Web服务返回一条消息。以下是我的代码示例,我正在返回一个字符串。 我目前收到以下回应… 我理想上想返回类似 我敢肯定,一旦我有了主意,就可以在需要时退还其他物品。这只是我需要解决的基础。 非常感谢所有帮助,在此先感谢:) 更新:刚发现这个… 我需要类似的东西吗 问题答案: 用: 返回的结果将类似于:

  • 基本上,我想做一个POST请求与以下主体: 为什么会这样?

  • 我有一个方法返回。代码如下类所示: 和作为错误。 如何解决此错误