我最初编写了一个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>>。
周围的工作可能是什么?提前感谢!!
问题的根本原因是缺少jar。Jersey使用Jackson,所以您需要下载Jackson jars。
下面是我在一起的示例应用程序中所需的所有Jackson罐子的列表:
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请求与以下主体: 为什么会这样?
我有一个方法返回。代码如下类所示: 和作为错误。 如何解决此错误