2013-06-21 29 views
0

我是java新手,我正在尝试编写一个实用程序api来加密/解密字符串。我有我的控制器和请求映射工作,并且我有加密/解密方法工作。在Java Web API中使用编码进行Url路由

我遇到的问题是解密包含正斜杠('/')的字符串。如果我将它在网址中未编码(例如http://localhost:8080/api/package/util/decrypt/oJfTtchpM9WC/4Oqpu7FZQ==),则URL路由会中断(这显然是为什么)。

如果我URL编码它(如http://localhost:8080/api/package/util/decrypt/oJfTtchpM9WC%2F4Oqpu7FZQ==)然后在路径变量中的值是空的。

另请注意,http://localhost:8080/api/package/util/decrypt/oJfTtchpM9WC(无斜线)工作正常。

似乎每当我在路径变量中放入一个'%',我就会得到一个空白页面作为回应。不打方法。不抛出异常(我能找到 - 再次,我还是学习环境)

我已经简化我的解密方法,只输出路径变量称为data

@RequestMapping(value = "/util/decrypt/{data}", method = RequestMethod.GET) 
@ResponseBody 
public String decrypt(HttpServletResponse httpResponse, 
     @PathVariable String data) throws Exception 
{ 
    return data; 
    // return URLDecoder.decode(data, "UTF-8"); 
} 

灿任何人都向我解释发生了什么,以及我如何才能做到这一点?

非常感谢!

+0

是参数数据null? – shazinltc

+0

它甚至没有出现在控制器中的解密方法。 – earthling

+1

您是否尝试传递它作为一个正常的请求参数即?data = yourEncryptedString – shazinltc

回答

0

我更新了我的加密方法,使用函数encodeBase64URLSafeString(而不仅仅是encodeBase64String),并将其更改为传递数据作为标准请求参数(即?data = string)。这消除了这个问题。

使用base64算法的URL安全变体对二进制数据进行编码 但不包含输出。网址安全的变体会发出 - 而不是+和/字符。注意:不添加填充。