Java 使用JAX-RS响应类返回实体时发生异常

Java 使用JAX-RS响应类返回实体时发生异常,java,tomcat,jax-rs,Java,Tomcat,Jax Rs,当我使用下面的代码时,我得到了一个异常。这看起来是jar的问题,为了符合这一点,我取消了对注释代码的注释,效果很好 消息类是用@XmlRootElement注释的,所以这也不应该是一个问题 获取异常-org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:MessageBodyWriter未找到媒体类型=应用程序/json,类型=类java.util.ArrayList,genericType=类jav

当我使用下面的代码时,我得到了一个异常。这看起来是jar的问题,为了符合这一点,我取消了对注释代码的注释,效果很好

消息类是用@XmlRootElement注释的,所以这也不应该是一个问题

获取异常-org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:MessageBodyWriter未找到媒体类型=应用程序/json,类型=类java.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;
// }
}

这会导致集合在运行时由于类型擦除而丢失类型。使用包装集合以保留其类型信息:

GenericEntity generic = new GenericEntity<List<Message>>(messages){};
return Response.ok().entity(generic).build();

您是否将jersey json添加到依赖项中?请同时发布您的web.xml。我在pom.xml中添加了jersey bom、jersey容器servlet核心、jersey media moxy作为依赖项。谢谢@grizzly。这是可行的,因为我刚刚开始学习JAX-RS,并不了解泛型实体。让我进一步探讨一下。
List<Message> messages 
Response.ok().entity(messages)
GenericEntity generic = new GenericEntity<List<Message>>(messages){};
return Response.ok().entity(generic).build();