我有一個應用程序接收來自SMPP服務器的消息,並將收到的消息轉發給用戶Web服務。所有用戶都有這樣的數據庫的URL:java中的模板解析URL
http://www.example.com/get.php?from=${originator}&to=${destination}&data=${content}
http://www.example.com/submit?origin=${originator}&dst=${destination}&cnt=${content}
他們都有${originator}
,${destination}
,${content}
在他們的模式。他們可能在URL中還有其他參數。我用Jodd StringTemplateParser
從數據庫中獲取用戶的URL後,以取代上述論點:
private StringTemplateParser stp = new StringTemplateParser();
private final Map<String, String> args = new HashMap<>();
args.put("originator", msg.getOriginator());
args.put("destination", msg.getDestination());
args.put("content", msg.getContent());
String result = stp.parse(deliveryUrl, new MacroResolver() {
@Override
public String resolve(String macroName) {
return args.get(macroName);
}
});
然後我使用Apache HTTP客戶端調用用戶網址:
URL url = new URL(result);
int port = url.getPort();
uri = new URI(url.getProtocol(), null, url.getHost(), port == -1 ? 80 : port, url.getPath(), url.getQuery(), null);
DefaultHttpClient client = new DefaultHttpClient();
HttpGet request = null;
try {
request = new HttpGet(uri);
client.execute(request)
} catch (Exception ex) {
if (request != null) {
request.releaseConnection();
}
}
我試着做一些編碼,因爲用戶可以發送任何包含字符如%$&
的文字。問題是當content
包含類似hello&x=2&c=3243
的用戶只能得到hello
。 URI
類將其視爲常規GET
查詢參數。誰能幫忙?