使用JAX-RS响应类返回实体时获取异常

时间:2017-04-02 16:27:00

标签: java tomcat jax-rs

当我使用下面的代码时,我得到了异常。它看起来像jar问题,为了符合它,我取消注释了注释代码并且它工作正常。

消息类使用@XmlRootElement注释,因此也不应该是一个问题。

获取异常 - org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:找不到媒体类型= application / json的MessageBodyWriter,type = class java.util.ArrayList,genericType = class java.util.ArrayList。

Credentials

}

@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;
// }

1 个答案:

答案 0 :(得分:1)

List<Message> messages 
Response.ok().entity(messages)

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

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