我正在测试连接到本地路由器的Android应用。在同一个WiFi网络上也使用Restlet运行一些Java Web服务。我确认Android应用可以访问服务过滤器,甚至可以从服务过滤器接收响应。但是,它似乎无法触及相关的Restlet服务。
该服务的完整URL是:
http://192.168.0.148:8080/MyApp/service/login
其中192.168.0.148
是运行Restlet Web服务的计算机的本地IP地址。
我将服务映射到我的Restlet Application
类中,如下所示:
router.attach("/login", LoginResource.class);
我的web.xml
文件具有适当的映射,可以将带有模式/service/
的任何内容路由到Restlet servlet。
我可以使用与上面提到的完全相同的URL从SOAP UI进行测试时成功点击此服务。实际上,所有Web服务都已使用SOAP UI进行端到端测试,并且完全正常运行。
出于某种原因,Android应用可以在达到时点击服务过滤器:
chain.doFilter(request, response);
请求最终在空间中丢失,并且不会返回任何内容。
我怀疑这主要是一个Reslets配置问题,虽然我不确切知道这里发生了什么。
答案 0 :(得分:0)
我几乎没有来自SO社区或Restlets的反馈,这实际上是有意义的,因为我在问题中报告的所有内容都是正确的。我决定将Restlet源附加到我的IntelliJ IDE,并逐步完成代码。我已经看到Tomcat日志包含响应代码415
,并且通过检查Restlets中的实际异常,我看到一条错误,指出我发布的媒体类型是意外的。看到这个,我立即知道我做错了什么,这是:
对于使用带有JSON的Restlet而面临类似问题的任何人,以下Android代码可以解决所有问题:
String endpoint = "http://192.168.0.148:8080/MyApp/service/login";
URL obj = new URL(endpoint);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
JSONObject json = new JSONObject();
json.put("username", username);
json.put("password", password);
// etc.