我的程序曾经可以工作,但在我更新了 NetBeans 和 Glassfish 后,它声明抛出: com.sun.jersey.api.MessageException:Java 类 java.util.LinkedList 和 Java 类型类 java.util 的消息体编写器。 LinkedList 和 MIME 媒体类型 application/json 未找到
我已经花了几天时间搜索解决方案,但没有任何效果。所以我创建了一个小的概念验证代码:
@Path("frend")
@Stateless
public class MyFrend
{
@Context
private UriInfo context;
public MyFrend(){}
// Throws: com.sun.jersey.api.MessageException: A message body writer for Java class java.util.LinkedList, and Java type class java.util.LinkedList, and MIME media type application/json was not found
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getAssets()
{
List<Frend> frends = new LinkedList<Frend>();
frends.add( new Frend() );
frends.add( new Frend() );
Response.ResponseBuilder rb = Response.ok( frends, MediaType.APPLICATION_JSON_TYPE );
Response r = rb.build();
return r;
}
}
如果我将返回类型“响应”替换为“列表”,它会起作用,但会将列表包装到根元素中,这会破坏与现有客户端的兼容性。这是代码:
@Path("ok")
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Frend> getAssetsOk()
{
List<Frend> frends = new LinkedList<Frend>();
frends.add( new Frend() );
frends.add( new Frend() );
return frends;
}
它产生: {" frend ":[{"id":"0","name":"Bob"},{"id":"0","name":"Bob"}]}
虽然我需要: [{"id":"0","name":"Bob"},{"id":"0","name":"Bob"}]
以防万一这是我的“朋友”课。
@XmlRootElement(name="frend")
public class Frend
{
public int id;
public String name = "Bob";
}
任何意见是极大的赞赏。
非常感谢,
——谢尔盖