我最初编写了一个java应用程序(命令行应用程序),现在我正在尝试使用jersey和jetty embeded将其转换为Web应用程序 . 现在作为服务休息类的输出,我需要以json格式输出 List<List<Map<String,String>>>
. 有办法实现这个目标吗?我是servlet和东西的新手 . 我试过这样:@GET @Path("test")@Produces(MediaType.APPLICATION_JSON)public List >> test()抛出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:找不到媒体类型= application / json的MessageBodyWriter,type = class java.util .ArrayList,genericType = java.util.List >> .
可能是什么工作?提前致谢!!
2 回答
问题的根本原因是缺少 jar . Jersey 使用 Jackson ,所以你需要下载 Jackson 的 jar .
这是我放在一起的示例应用程序所需的所有Jackson jar 的列表:
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
在我的示例中,我创建了以下类:
而这个servlet类:
以下XML已添加到我的应用程序中的web.xml配置中:
在浏览器中请求servlet返回以下JSON:
一旦你克服了识别 Jersey 和 Jackson 的所有依赖关系的斗争,它们就是非常强大的库 .
你的结果JSON可能是这样的:
在您的注释代码中,您实际上已经为 Map 创建了内部
JSONObject
,您只需要将它们附加到JSONArray
,然后将这些JSONArray
s放入另一个JSONArray
,然后将此最终JSONArray
放在结果JSONObject
中并返回它 .