Flex HttpService:追加到目标
我正在使用Flex连接到Rest服务。例如,要访问订单#32,我可以将URL称为http:// [service] / orders / 32.
由于客户端将连接到服务的不同实例,因此必须将URL配置为目标。所有这些都使用Blaze代理,因为它涉及GET,PUT,DELETE和POST调用。
问题是:使用HttpService时,如何在目标末尾添加" 32"?我所做的只是设置目标,并在某个时候将其转换为URL。我已经跟踪了代码,但是我不知道该在哪里完成,因此无法替换它。
选项有:
1.在Flex客户端中将目标解析为URL,然后将URL(带有添加数据)设置为URL。
2.编写覆盖标准代理的我自己的Java Flex适配器,然后将参数映射到url,如下所示:http:// [service] / order / {id}?id = 32到http:// [service] /订单/ 32
有人遇到过这个问题吗?有没有简单的方法可以解决这个问题?
解决方案
这是通过click事件的处理程序将URL解析为Flex中HTTPService的简单方法。
这是一项服务:
<mx:HTTPService id="UCService" result="UCServiceHandler(event)" showBusyCursor="true" resultFormat="e4x" />
然后是处理程序:
private function UCmainHandler(UCurl:String) { UCService.url = UCurl; UCService.send(); }
这是一个示例单击事件:
<mx:Button label="add to cart" click="UCmainHandler('http://sampleurl.com/cart/add/p18_q1?destination=cart')" />
当然,我们可以将其他值传递给click处理程序,或者甚至使处理程序根据其他当前设置等将内容添加到url中。
希望能有所帮助!
众所周知,这就是我解决此问题的方法:
我在服务器上创建了一个自定义HTTPProxyAdapter
public MyHTTPProxyAdapter extends flex.messaging.services.http.HTTPProxyAdapter { public Object invoke(Message message) { // modify the message - if required process(message); return super.invoke(message); } private void process(Message message) { HTTPMessage http = (HTTPMessage)message; if(http != null) { String url = http.getUrl(); ASObject o = (ASObject)http.getBody(); if(o != null) { Set keys = o.keySet(); Iterator it = keys.iterator(); while(it.hasNext()) { String key = (String)it.next(); String token = "[" + key +"]"; if(url.contains(token)) { url = url.replace(token, o.get(key).toString()); o.remove(key); } } http.setUrl(url); } } } }
然后将目标适配器替换为我的适配器。
我现在可以在config.xml中使用以下URL,方括号中的任何内容都将被查询字符串替换:
<destination id="user-getbytoken"> <properties> <url>http://localhost:8080/myapp/public/client/users/token/[id]</url> </properties> </destination>
在此示例中,将目标设置为user-getbytoken并使用参数{id:123}将导致URL为http:// localhost:8080 / myapp / public / client / users / token / 123