没有找到Java类型的消息体读取器,类org.json.JSONObject ....和MIME媒体类型,application / json

时间:2014-02-20 05:25:20

标签: java android json web-services rest

我正试图从android调用一个平针织的restful web服务。我的android代码是

客户代码:

HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost("http://X.X.X.X:8080/RestfulService/rest/post");
post.setHeader("content-type", "application/json");

JSONObject dato = new JSONObject();
dato.put("email", email);
dato.put("password", password);

StringEntity entity = new StringEntity(dato.toString());
post.setEntity(entity);
HttpResponse resp = httpClient.execute(post);
String rs = EntityUtils.toString(resp.getEntity());
return rs

网络服务代码

@POST
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_JSON })   
public String AuthMySQL(JSONObject json) {

String password = (String) json.get("password");
String email = (String) json.get("email");

*I am using the string values to get the result from the database*

}

我得到的错误类似于 com.sun.jersey.api.client.ClientHandlerException:Java类型的消息体读取器,类org.json.JSONObject ....和MIME媒体类型,application /找不到json。

非常感谢您的帮助

2 个答案:

答案 0 :(得分:0)

当您没有包含正确的库以将json正确映射到POJO或者输入没有适当的POJO时,会发生这种情况。

查看将jersey-json maven dependency添加到项目中

答案 1 :(得分:0)

如果你不想添加一个库,只想获得解析后的JSON(即没有映射到POJO),那么你可以实现一个基本的MessageBodyReader,例如:< / p>

public class JSONObjectMessageBodyReader implements MessageBodyReader<JSONObject> {
    @Override
    public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
        return type == JSONObject.class && mediaType.equals(MediaType.APPLICATION_JSON_TYPE);
    }

    @Override
    public JSONObject readFrom(Class<JSONObject> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders, InputStream entityStream) throws IOException, WebApplicationException {
        try {
            // Using Apache Commons IO:
            String body = IOUtils.toString(entityStream, "UTF-8");
            return new JSONObject(body);
        } catch(JSONException e) {
            throw new BadRequestException("Invalid JSON", e);
        }
    }
}

然后在您的网络服务代码中:

@POST
public Response doSomething(JSONObject body) {
   ...
}