2012-11-29 8 views
8

मेरे पास एक जैक्स-आरएस सेवा है जो पथ, पथदर्शी में पैरामीटर का एक सेट प्राप्त करती है। ये पैरामीटर यूआरएल के लिए उपयुक्त नहीं मान वाली स्ट्रिंग को हो सकता है, इसलिए वे तो जैसे java.net.UrlEncoder का उपयोग कर ग्राहक के पक्ष urlencoded रहे हैं:जैक्स-आरएस स्वचालित डीकोड पथपरम

String param = URLEncoder.encode(o.toString(), "UTF-8"); 

इस यूआरएल supplier/group/param1/param2/param3 निर्माण करने के लिए प्रयोग किया जाता है। यदि इनमें से एक urlencoding के कारण बदल दिया गया है, उदाहरण के लिए यदि यह केवल एक स्थान है, तो सेवा पर प्राप्त स्ट्रिंग + संकेत है।

@GET 
@Path("{supplierId}/{groupCode}/{groupId}") 
@Produces({MediaType.APPLICATION_XML, MediaType.TEXT_XML}) 
public SupplierGroup getSupplierGroup(@PathParam("supplierId") BigDecimal supplierId, 
     @PathParam("groupCode") String groupCode, 
     @PathParam("groupId") BigDecimal groupId) { 
    //now groupCode is "+", not " " 
} 

मैं jaxrs स्वचालित रूप से इनकोडिंग पथ पैरामीटर डिकोड करने के लिए उम्मीद करेंगे।

संपादित करें: थोड़ा और परीक्षण करना मैंने पाया कि अंतरिक्ष के लिए %20 का उपयोग करते समय, यह परम को डीकोड करने में सक्षम है।

+0

'URI.toAsciiString' का उपयोग करना हमेशा काम नहीं करता है। @ Yegor256 का उत्तर अधिक मजबूत है - फ़ंक्शन डिक्रेशन – SomethingSomething

उत्तर

11

पथपरैम का स्वत: एन्कोडिंग अपेक्षा के अनुसार काम करता है। समस्या यह थी कि %20 यूआरएल में रिक्त स्थान एन्कोड करने के लिए प्रयोग किया जाता है, जबकि + क्वेरी स्ट्रिंग को एन्कोड करने के लिए उपयोग किया जाता है (बाद में भाग?)। पाथपरैम वास्तव में यूआरएल के हिस्से हैं, इसलिए% 20 का उपयोग किया जाना चाहिए।

UrlEncoder.encode(...) के बजाय URI.toAsciiString() का उपयोग करके और विभिन्न हिस्सों को पारित करने से वैध यूआरएल सही ढंग से डीकोड किया जाता है।

3

PathParam जावाडोक से उद्धरण:

मूल्य यूआरएल डीकोड जब तक इस एनकोडेड एनोटेशन का उपयोग कर अक्षम होता है।

+2

के ठीक ऊपर '@ एन्कोडेड' एनोटेशन जोड़ें! लेकिन ऐसा नहीं होता है, और मैंने इसे अक्षम नहीं किया है! –

+0

जो आप जेएक्स-आरएस कार्यान्वयन का उपयोग कर रहे हैं? – yegor256

+0

यह एम्बेडेड ओपेनजेब कंटेनर चलाने वाले परीक्षणों में एक समस्या है। हम इसे एक websphere सर्वर पर तैनात करने जा रहे हैं हालांकि ... क्या यह एक सीएक्सएफ कार्यान्वयन है? –

संबंधित मुद्दे