有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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

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

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