java在使用JAXRS响应类返回实体时遇到异常
当我使用下面的代码时,我得到了一个例外。这看起来是jar问题,为了符合它,我取消了注释代码,效果很好
Message类用@XmlRootElement注释,所以这也不应该是一个问题
获取异常-org。玻璃鱼。运动衫消息内部的MessageBodyProviderNotFoundException:找不到媒体类型为application/json、类型为class java的MessageBodyWriter。util。ArrayList,genericType=类java。util。ArrayList
@Path("/messages")
@Singleton
public class MessageResource {
MessageService service = new MessageService();
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getMessages(@BeanParam MessageBean bean) {
List<Message> messages;
if (bean.getYear() > 0)
messages = service.getMessagesForYearById(bean.getYear());
messages = service.getMessages();
return Response.ok().entity(messages).build();
}
// @GET
// @Produces(MediaType.APPLICATION_JSON)
// public List<Message> getMessages(@BeanParam MessageBean bean) {
//
// List<Message> messages;
//
// if (bean.getYear() > 0)
// messages = service.getMessagesForYearById(bean.getYear());
// messages = service.getMessages();
//
//
// return messages;
// }
}
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servletclass>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>testing.jaxrs.Messages</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/webapi/*</url-pattern>
</servlet-mapping>
# 1 楼答案
这会导致集合在运行时由于类型擦除而丢失类型。用GenericEntity包装集合以保留其类型信息: