2014-09-20 95 views
4

客户端服务器上的发送(实施无所谓):在何处以及如何解码@PathVariable

/path/items/ + urlencode(id, SOME_ENCODING) 

考虑结果的网址为:

/path/items/my%2Fkey 

因此,我对服务器:

@RequestMapping(value = "/path/items/{identifier}", method = RequestMethod.GET) 
public Item get(@PathVariable String identifier) { 
try { 
    return DAO.getItemByIdentifier(URLDecoder.decode(identifier, SOME_ENCODING)) 
} 
catch (UnsupportedEncodingException e) { 
... 
} 

有没有办法在内部做到这一点?我的意思是得到标识已解码的,所以我可以只:

@RequestMapping(value = "/path/items/{identifier}", method = RequestMethod.GET) 
    public Item get(@PathVariable String identifier) { 
return DAO.getitemByidentifier(identifier); // already decoded! 
    } 
+1

这是自动完成的。当我向'/ my%20key'发送请求时,我在路径变量中获得'我的密钥'。 – 2014-09-20 08:14:40

回答

2

你可以使用Spring的CharacterEncodingFilter类的web.xml作为过滤器,如下所示:

<filter> 
    <filter-name>CharacterEncodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
    <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CharacterEncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
相关问题