从Java后端读取NSstring的REST响应

时间:2016-06-03 14:17:31

标签: java json rest jersey

当我尝试从服务器上获取响应时收到以下错误:

JSON
Error: org.json.JSONException: A JSONObject text must begin with '{' at  1 [character 2 line 1]

客户端是用Objective C编写的IOS应用程序。我发送的NSString具有以下编码:

NSString *jsonString = [[NSString alloc] initWithData:jsonData    encoding:NSUTF8StringEncoding];

这是NSString的nslog输出:

{
 "longitude" : "-122.03121860000000253876",
 "latitude" : "37.33233141000000188114"
}

这是我在java服务器上的get函数:

  @GET
  @Consumes(MediaType.APPLICATION_JSON)
  @Produces(MediaType.APPLICATION_JSON)
  public String get(String result) throws JSONException, IOException {
      JSONObject sit = null;          
      try {
          System.out.println(result + "JSON");
          sit = new JSONObject(result);
          System.out.println("Success: json = ");
          System.out.println(sit.toString(2));
        } catch(JSONException ex) {
          System.out.println("Error: " + ex);
        }
    return this.dBQ.getSItems(sit).toString();
  }

我想知道你们是否可以指出我正确的方向。我非常能够从客户端获得服务器的响应。但由于某种原因,变量导致我的java函数(在服务器上)输出为空并吐出异常。

由于

2 个答案:

答案 0 :(得分:0)

我必须查找org.json.JSONObject - 这是Android API,对吧?为什么在后端使用它?

无论如何,看看你使用的构造函数的JavaDoc,它说:

  

参数json String:包含对象的 JSON编码的字符串

你的result字符串已经被JAX-RS解析了,所以它只是没有花括号的裸文本。所以我说这就是你获得例外的原因。

就像我提到的,我真的不懂Android API,但是如果你真的必须使用它,你应该先尝试JSONObject.quote(String)将字符串包装起来然后再传递给构造函数。

答案 1 :(得分:0)

实际上我回答了我自己的问题,我使用了以下代码的帖子请求:

  private DBQuery dBQ = new DBQuery();
  @POST
  @Consumes(MediaType.APPLICATION_JSON)
  @Produces(MediaType.APPLICATION_JSON)
  public String getresponses(String si) {
      return this.dBQ.getItems(si).toString();
  }