JAX-RS客户端JSON处理

时间:2014-07-17 21:53:24

标签: json jax-rs moxy jersey-2.0 jersey-client

当我尝试测试JSON数据交换时,我在JAX-RS客户端面临异常。我使用的是Jersey 2.10,JDK1.7,Tomcat7.0。有人可以告诉我需要采取哪些步骤以及实施这项工作的例子。截至目前,我没有在客户端配置ContextResolver,Provider,MessageBodyWriter / Reader。

以下是异常堆栈跟踪,

    SEVERE: MessageBodyWriter not found for media type=application/json, type=class org.vedvrat.jaxrs.model.Customer, genericType=class org.vedvrat.jaxrs.model.Customer.
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class org.vedvrat.jaxrs.model.Customer, genericType=class org.vedvrat.jaxrs.model.Customer.
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:247)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
    at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1154)
    at org.glassfish.jersey.client.ClientRequest.writeEntity(ClientRequest.java:500)
    at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.java:315)
    at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:227)
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:224)
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:656)
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:653)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424)
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:653)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:413)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:322)
    at org.vedvrat.jaxrs.client.bbc.six.JSONRequestTest.main(JSONRequestTest.java:40)

2 个答案:

答案 0 :(得分:2)

您需要注册其中一个JSON JAX-RS提供程序。请参阅Jersey用户指南中专用于各种JSON提供程序的chapter。基本上,在选择提供程序并在类路径上添加适当的模块之后,您需要在Jersey运行时中注册一个提供程序,例如杰克逊将会:

Client client = ClientBuilder.newClient().register(JacksonFeature.class);

另请参阅Registering Resources and Providers in Jersey 2以了解此概念的工作原理。

答案 1 :(得分:0)

你必须添加genson-1.3.jar,它适用于我的情况