我正在使用Flex连接到Rest服务。例如,要访问订单#32,我可以调用URL http://[service]/orders/32。 URL 必须配置为目标 - 因为客户端将连接到服务的不同实例。所有这些都使用Blaze Proxy,因为它涉及GET,PUT,DELETE和POST调用。 问题是: - 在使用HttpService时,如何将“32”附加到目的地的末尾?我所做的只是设置目的地,并在某些时候将其转换为URL。我已经跟踪了代码,但我不知道这是做什么的,所以无法替换它。
选项包括: 1.将目标解析为Flex客户端中的URL,然后将URL(带有附加数据)设置为URL。 2.编写我自己的java Flex Adapter,它覆盖标准Proxy,并将参数映射到url,如下所示:http://[service]/order/ {id}?id = 32 to http://[service]/order/32
之前有没有人遇到过这个问题,有什么简单的方法可以解决这个问题吗?
答案 0 :(得分:1)
大家都知道,这就是我解决这个问题的方法:
我在服务器上创建了一个自定义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}将生成http://localhost:8080/myapp/public/client/users/token/123
的网址答案 1 :(得分:0)
这是通过click事件处理程序在Flex中解析HTTP服务URL的简单方法。
这是一项服务:
<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 ...
希望有所帮助!