我正试图从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。
非常感谢您的帮助
答案 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) {
...
}