GET方法不允许使用REST Android方法

时间:2015-06-05 12:06:10

标签: java android json rest

我有一个在Spring Tool Suite中制作的Android应用程序和REST服务器。 REST连接到数据库并根据GET请求中的查询返回Json对象列表。 这是我对GET方法的REST响应

@RequestMapping(value = "/short", method = RequestMethod.GET)
public  Map<String,List<Temperature>> shortPeriod(@RequestParam(value = "time",required = false)
         @DateTimeFormat(pattern="yyyy:MM:dd HH:mm:ss")  Date time){
    Map<String, List<Temperature>> results = new HashMap<String, List<Temperature>>();
    List<Temperature> temperatureList = new ArrayList<Temperature>();   
    System.out.println("TEST!");
    try {
        temperatureList = dataServices.getEntityList(time,"short");
        results.put("data", temperatureList);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return results;
}

这就是我在android上连接的方式

       String tempUrl = new String("http://" + IP + ":8080/" + "RestServer/temperature/" + tableName + "?time=" + urlQueryTimestamp);

        String encodedUrlTemp = tempUrl.replace(" ", "%20");
        String encodedUrl = encodedUrlTemp.replace("-", ":");

        connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.connect();

我已将测试打印件和它的工作正常,直到connection.connect();

网址看起来像这样

http://192.168.1.106:8080/RestServer/temperature/short?time=2015:06:05%2010:20:03

我打印&#34; url&#34;在连接之前变量,当我拿到那个url并将其粘贴到chrome中时,我会得到正常的响应。但是,当我尝试在我的应用程序中连接时,我得到了#34;方法不允许&#34;。我找到了一些关于该异常的解决方案,并且通常在服务器上没有实现POST方法的问题,但是使用相同的url我在计算机上的chrome上获得了正常的响应,甚至在智能手机上的我的移动chrome上也是如此。 另一件事是我有一个其他服务器用硬编码的json数据进行测试,当http请求中没有查询时我可以正常连接,所以只有这个 http://192.168.1.106:8080/RestServer/temperature/short

所以我的假设是chrome在内部转义一些字符串或者在使用查询时自行设置一些标题信息,而android并没有。服务器甚至没有记录我在上面代码中粘贴的请求,就像我发送了错误的网址一样。

另外一件事,我尝试使用Android库中的url编码器,但它逃脱了一些不应该被转义的字母,我读到它为了html而逃脱了它,所以我手动做(也许我& #39;做错了)。

我关闭了防火墙,检查了ip地址十几次,我没有更多想法。

1 个答案:

答案 0 :(得分:0)

在尝试完所有逃避,更改库以及阅读URI和URL的解决方案之后,我在android开发者文档页面上找到了解决方案,其中说:

  

HttpURLConnection默认使用GET方法。 如果是,它将使用POST   setDoOutput(true)被称为。其他HTTP方法(OPTIONS,HEAD,   PUT,DELETE和TRACE)可以与setRequestMethod(String)一起使用。

希望这有助于某人