2015-06-01 64 views
0

我想創建Web服務,我可以使用HTTP GET方法發送stardog請求。我的問題是,stardog請求使用了一些URL中不允許的符號,如?;,我試圖不強制用戶手動將其轉換爲%3F%3B如何在URL中使用字符串?

所以我想我的URL看起來像這樣:

localhost:8080/WebServiceTest/query?select="SELECT * WHERE {?s ?p ?o}" 

我的球衣註解如下:

@GET 
@Path("/query") 
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8") 
public String execQuery(@QueryParam("select") String selectQuery, @QueryParam("update") String updateQuery) { 

有誰知道這是否可能?如果是這樣,我該怎麼做?

+0

該JAX-RS資源的客戶端是什麼?網頁瀏覽器?它應該自動對任何輸入進行URL編碼。 Jersey會恢復這種編碼,所以'selectQuery'將包含正確的輸入。 –

+0

它可能是一個網頁瀏覽器,但它也可能是cURL或任何其他用於傳輸數據的工具。 Web瀏覽器不是對這個?進行編碼,我想這是因爲它將它們理解爲一個查詢參數,它應該是一個簡單的符號。 –

回答

0

如果您在客戶端使用Javascript/ECMAScript 5.1 ++,則可以將字符串轉換爲uri字符串格式。使用方法

encodeURIComponent(str); 

這是解釋here

它也可以替換? ;以他們的百分比表示字符。 (在使用cUrl的情況下)

(SPACE) ! " # $ % & ' ( ) * + , / : ; 
%20  %21 %22 %23 %24 %25 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B  

= ? @ [ ] 
%3D %3F %40 %5B %5D 
+0

我想使用Javascript,問題是我不確定用戶將如何訪問此URL。如果他只是在他的瀏覽器中鍵入URL,我不能使用JS。 –

+0

這是正確的。如果用戶在瀏覽器網址字段中鍵入URL,並且瀏覽器沒有自動URL編碼,則文本將通過http發送,並可能被接收器或代理誤解。我不知道一種避免這種情況的方法。也許SO上的某個人知道一種攔截瀏覽器http發送(可能通過實現一個插件)的方法,但對於所有使用的瀏覽器來說,這是一種祕密。我認爲這將超出範圍。也許有些插件會自動執行urlencoding。但是允許用戶提供代碼是一個巨大的安全風險。你懂? ;-) –

+0

感謝您的回答。那麼我猜用戶必須自己編碼。是的,我明白爲什麼這是一件非常危險的事情,但我只是在做我老闆要我做的事情。 –

相關問題