杰克逊 - 杰克逊解析器没有解析json

时间:2015-03-09 13:14:01

标签: java json jersey jackson jax-rs

我写了一个小型的Web服务,我正在传递一个JSON。在发送请求时,RESTClient说:Status Code: 415 Unsupported Media Type,我认为我已经把头文件放入Content-Type:application / json。

我在服务器端收到的错误消息是:

    [ERROR   ] A message body reader for Java class com.udm.jsons.JSON_Device, and Java type class com.udm.jsons.JSON_Device, and MIME media type application/json; charset=UTF-8 was not found.
The registered message body readers compatible with the MIME media type are:
application/json; charset=UTF-8 ->
  com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$App
  com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$App
  com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$App
  com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$App
  com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$App
*/* ->
  com.sun.jersey.core.impl.provider.entity.FormProvider
  com.sun.jersey.core.impl.provider.entity.StringProvider
  com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
  com.sun.jersey.core.impl.provider.entity.FileProvider
  com.sun.jersey.core.impl.provider.entity.InputStreamProvider
  com.sun.jersey.core.impl.provider.entity.DataSourceProvider
  com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
  com.sun.jersey.core.impl.provider.entity.ReaderProvider
  com.sun.jersey.core.impl.provider.entity.DocumentProvider
  com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
  com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
  com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$General
  com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
  com.sun.jersey.core.impl.provider.entity.EntityHolderReader
  com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
  com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
  com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy

我在服务器端使用了正确的格式:

@Path("/initiateProvisioning")
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public ResponseInfo initiateProvisioning(JSON_Device device)

我已经使用jsonschema2pojo.org生成了用于杰克逊的POJO。请帮忙,我一直被困住了!

2 个答案:

答案 0 :(得分:0)

如果没有将完整请求发送到REST服务,我只能做出假设。检查标头和有效负载是否为UTF-8编码。此外,有效载荷必须只有{...}

答案 1 :(得分:0)

根据我的理解,您正在从客户端发布JSON有效负载,并尝试在您的一种资源方法中以POJO的形式接收它。你需要一个MessageBodyReader来实现这一目标。此接口的实现将包含将原始(JSON)输入流转换为POJO(JSON_Device)的逻辑。 JAX-RS运行时将在它调用您的方法并将返回的对象注入您的方法(initiateProvisioning)参数时自动调用它

JAX-RS javadocs - http://docs.oracle.com/javaee/6/api/javax/ws/rs/ext/MessageBodyReader.html