如何在请求中发送JSON数据以休息Web服务

时间:2015-02-27 21:32:15

标签: json rest

我创建了一个rest webservice,它在一个方法中有以下代码:

@POST
@Path("/validUser")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public JSONObject validUserLogin(@QueryParam(value="userDetails") String userDetails){
    JSONObject json = null;
    try{
        System.out.println("Service running from validUserLogin :"+userDetails);
        json = new JSONObject(userDetails);
        System.err.println("UserName : "+json.getString("userName")+" password : "+json.getString("password"));
        json.put("httpStatus","OK");
        return json;            
    }
    catch(JSONException jsonException) {
       return json;
    }
}

我在客户端代码中使用Apache API。以下客户端代码通过向此服务发布一些用户相关数据来调用此服务:

public static String getUserAvailability(String userName){
    JSONObject json=new JSONObject();

    try{
        HttpContext  context = new BasicHttpContext();
        HttpClient client = new DefaultHttpClient();
        client.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2109);
        URI uri=new URIBuilder(BASE_URI+PATH_VALID_USER).build();
        HttpPost request = new HttpPost(uri);
        request.setHeader("Content-Type", "application/json");
        json.put("userName", userName);
        StringEntity stringEntity = new StringEntity(json.toString());
        request.setEntity(stringEntity);
        HttpResponse response = client.execute(request,context);
        System.err.println("content type : \n"+EntityUtils.toString(response.getEntity()));
    }catch(Exception exception){
        System.err.println("Client Exception: \n"+exception.getStackTrace());
    }
    return "OK";
}

问题是,我能够调用该服务,但我在服务请求中传递的参数结果为null。

我是否在请求中以错误的方式发布数据。此外,我想在响应中返回一些JSON数据,但我无法得到它。

1 个答案:

答案 0 :(得分:0)

在扎克的帮助下,我能够解决这个问题, 我使用了jackson-core jar并更改了服务代码,如下所示。

@POST
@Path("/validUser")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public JSONObject validUserLogin(String userDetails){
  ObjectMapper mapper = new ObjectMapper();
    JsonNode node = mapper.readValue(userDetails, JsonNode.class);

        System.out.println("Service running from validUserLogin :"+userDetails);

        System.out.println(node.get("userName").getTextValue());
        //node.("httpStatus","OK");
        return Response.ok(true).build();       

}
相关问题