gpt4 book ai didi

java - 使用 JAX-RS 响应类返回实体时出现异常

转载 作者:行者123 更新时间:2023-11-28 22:49:53 25 4
gpt4 key购买 nike

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

消息类使用@XmlRootElement 注释,因此这也不应该成为问题。

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

@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>

最佳答案

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

由于运行时的类型删除,这会导致 Collection 携带类型丢失。用 GenericEntity 包装集合保留其类型信息:

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

关于java - 使用 JAX-RS 响应类返回实体时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43170665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com