我正在尝试寻找绕过我帮助支持的Web应用程序设计缺陷的最佳方法。服务的一部分将参数(“myparam”)传递给.jsp页面,该页面又调用REST服务,其中包括我们的myparam作为路径参数。设计缺陷是myparam应该作为表单参数传递,因为它可以是自由文本。但是,我们无法改变实现,因为其他方都参与了.jsp事情。编码/解码REST路径参数
我的解决办法是使用编码十六进制编码(URL编码单独为你结束了“%”等,其中org.restlet实现REST的不喜欢的路径参数看不工作)的myparam。使用Apache的编解码器库,我有这样的事情:
选项1(只十六进制):
String decodedParam = new String(Hex.decodeHex(myparam.toCharArray()));
这适用于我们的目的。我真正想要做的是URL-和十六进制编码结合起来,这样我就可以真正覆盖所有posibilities:
选项2(十六进制+ URL解码):
参数准备:
String workText = URLEncoder.encode(inText, encoding); // a
char[] encodedBytes = Hex.encodeHex(workText.getBytes()); // b
String myparam = new String(encodedBytes);
解码(REST):
String decodedParam = new String(Hex.decodeHex(myparam.toCharArray())); // c
String doubleDecodedParam = URLDecoder.decode(decodedParam, "UTF-8"); // d
我有两个问题:
为什么第二个选项不起作用? (每当我尝试和URL解码我的字符串在D)我得到一个java.lang.IllegalArgumentException)。我已经在http://ostermiller.org/calc/encode.html上测试了我的参数值的双重编码和解码,没有问题。
有没有更好的方式来编码路径参数与REST?
1.您在哪里得到IllegalArgumentException?任何堆栈跟踪?至少是抛出异常的地方? – 2009-09-28 07:55:24