相关疑难解决方法(0)

找不到媒体类型= application/json的MessageBodyReader

我写了一个JAX-RS服务器,客户端都使用Jersey.我想将我的实体集合发送给客户端,我做了以下步骤:

  1. Made实体扩展了Serializable
  2. 写了一个自定义提供程序并将其扩展为支持集合
  3. 将实体和提供者复制粘贴到客户端

我发出请求,它在服务器端成功处理客户端收到错误:

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/json, type=interface java.util.List, genericType=java.util.List<model.HotelsEntity>.
org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:225)
org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:149)
org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1124)
org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:853)
org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:812)
org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:377)
org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:813)
org.glassfish.jersey.client.JerseyInvocation.access$600(JerseyInvocation.java:90)
org.glassfish.jersey.client.JerseyInvocation$3.call(JerseyInvocation.java:693)
org.glassfish.jersey.internal.Errors.process(Errors.java:315)
org.glassfish.jersey.internal.Errors.process(Errors.java:297)
org.glassfish.jersey.internal.Errors.process(Errors.java:228)
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424)
org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:689)
org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:405)
org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:301)
service.HotelService.getHotels(HotelService.java:30)
actions.HotelAction.perform(HotelAction.java:42)
MainServlet.processResponse(MainServlet.java:33)
MainServlet.doPost(MainServlet.java:22)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
Run Code Online (Sandbox Code Playgroud)

服务器:

    @GET
@Produces(MediaType.APPLICATION_JSON)
public Response getHotelsList(@QueryParam("startDate") String startDate,
                              @QueryParam("endDate") String endDate) {
    List<HotelsEntity> list = hotelService.getAll();
    return ResponseFactory.response(Response.Status.OK, list);
}
Run Code Online (Sandbox Code Playgroud)

客户:

    GenericType<List<HotelsEntity>> genericType = new GenericType<List<HotelsEntity>>(){};
    WebTarget target = client.target(preparePath());
    List<HotelsEntity> hotels = target.request(MediaType.APPLICATION_JSON_TYPE).get(genericType);
Run Code Online (Sandbox Code Playgroud)

提供者:

public class JsonProvider<T> implements MessageBodyReader<T>, MessageBodyWriter<T> {

@Override …
Run Code Online (Sandbox Code Playgroud)

java json jax-rs jersey

27
推荐指数
4
解决办法
7万
查看次数

标签 统计

java ×1

jax-rs ×1

jersey ×1

json ×1