Json 如果我使用Response.ResponseBuilder,Glassfish会抛出MessageException
我的程序以前可以运行,但在我更新了NetBeans和Glassfish之后,它声明将抛出: com.sun.jersey.api.MessageException:未找到Java类Java.util.LinkedList、Java类型类Java.util.LinkedList和MIME媒体类型application/json的消息正文编写器 我已经花了好几天时间在谷歌上搜索一个解决方案,但没有任何效果。因此,我创建了一个小型概念验证代码:Json 如果我使用Response.ResponseBuilder,Glassfish会抛出MessageException,json,jakarta-ee,glassfish,jersey,jax-rs,Json,Jakarta Ee,Glassfish,Jersey,Jax Rs,我的程序以前可以运行,但在我更新了NetBeans和Glassfish之后,它声明将抛出: com.sun.jersey.api.MessageException:未找到Java类Java.util.LinkedList、Java类型类Java.util.LinkedList和MIME媒体类型application/json的消息正文编写器 我已经花了好几天时间在谷歌上搜索一个解决方案,但没有任何效果。因此,我创建了一个小型概念验证代码: @Path("frend") @Stateless pu
@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;
}
}
非常感谢您的建议
非常感谢
--Sergey为了解决导致异常的问题,我必须将实体包装在GenericEntity类中:
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getAssets()
{
LinkedList<Frend> frends = new LinkedList<Frend>();
frends.add( new Frend() );
frends.add( new Frend() );
GenericEntity<LinkedList<Frend>> entity = new GenericEntity<LinkedList<Frend>>(frends) {};
Response.ResponseBuilder rb = Response.ok( entity, MediaType.APPLICATION_JSON_TYPE );
Response r = rb.build();
return r;
}
@GET
@产生(MediaType.APPLICATION_JSON)
公众回应
{
LinkedList frends=新建LinkedList();
添加(新的Frend());
添加(新的Frend());
GenericeEntity实体=新的GenericeEntity(法语){};
Response.ResponseBuilder rb=Response.ok(实体、MediaType.APPLICATION\u JSON\u类型);
响应r=rb.build();
返回r;
}
但我遇到了与刚返回LinkedList时相同的问题:
它产生:
{“frend”:[{“id”:“0”,“name”:“Bob”},{“id”:“0”,“name”:“Bob”}]}
虽然我需要:
[{“id”:“0”,“name”:“Bob”},{“id”:“0”,“name”:“Bob”}]尝试将genson库添加到类路径,它将启用jsonsupport@eugen如果我转到项目属性/库/全局库,我在那里看不到“genson”库。我应该从下载并手动添加吗?如果您使用maven,您只需要向genson添加一个新的依赖项,否则您必须在站点上下载它,然后将其添加到您的应用程序中classpath@eugen我已经添加了下载的genson-0.94.jar并将其添加到库中。现在我有一条新消息:警告:WEB9052:无法加载类com.owlike.genson.ext.jersey.GensonJsonConverter,原因:java.lang.ClassNotFoundException:com.owlike.genson.ext.jersey.GensonJsonConverter和旧错误:严重:消息体编写器。。。严重:与MIME媒体类型兼容的注册消息体编写器是:application/json->com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$App com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$AppTnx!我试了几个小时。
@XmlRootElement(name="frend")
public class Frend
{
public int id;
public String name = "Bob";
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getAssets()
{
LinkedList<Frend> frends = new LinkedList<Frend>();
frends.add( new Frend() );
frends.add( new Frend() );
GenericEntity<LinkedList<Frend>> entity = new GenericEntity<LinkedList<Frend>>(frends) {};
Response.ResponseBuilder rb = Response.ok( entity, MediaType.APPLICATION_JSON_TYPE );
Response r = rb.build();
return r;
}