2012-04-28 307 views
0

我有一个要求,我在@RequestMapping中使用的ID接受的格式为1234567812345678abcxyz/abcxy+z$(基本上是一个自动生成的字符串,其中有/正斜杠)的值。如何在@RequestMapping中使用“/”斜杠?

我已经尝试了所有的3映射以下格式,但没有任何工程:

@RequestMapping(value="abc/action/{id: .+[//]*.*}.{format}", method=RequestMethod.PUT) - 接受什么。

@RequestMapping(value=" abc/action/{id:.+}.{format}", method=RequestMethod.PUT) - 接受除了/

@RequestMapping(value=" abc/action/{id:.*}.{format}", method=RequestMethod.PUT)一切 - 接受一切,除了/

然而,当我尝试在一个正常的java程序相同的正则表达式,它就像一个魅力:

package miscellenousTest; 
public class RegExTest { 
    public static void main(String[] args) { 
     String s1 ="9876543298765432"; 
     String s2 =" abcxyz/abcxy+z$"; 
     System.out.println(s1.matches(".+[//]*.*")); 
     System.out.println(s2.matches(".+[//]*.*")); 
    } 
} 

我已经通过了一些以前的帖子,但没有给我确切的解决方案,我正在寻找。

如果有人能够在这个问题上抛出一些指针/解决方案,那将会很棒。

+1

'/'不是反斜杠,它是一个正斜杠。 – skaffman 2012-04-28 15:25:44

+0

或者只是斜杠。但*最重要的* ***不是***反斜杠。 – 2012-04-28 15:31:02

+0

您可以编写一个过滤器来编码即将到来的请求 – 2015-01-27 17:01:26

回答

1

在网址中发送数据时,不应使用斜线。在发送之前,您需要对其进行urlencode编码。它会在被回复给你之前被解码。

有时我会在遇到此问题时创建Web安全名称。因此,例如,我需要有时发送像“12345/01”这样的ID。当我通过网址发送它们时,我会说“12345_01”,我们称之为网络安全ID。然后,我们通过将_替换为/当我们需要真实身份时进行转换。

+0

感谢您的回复Lowe。但是,这种编码和解码模式看起来有点麻烦,我不能总是期望客户端使用编码的URL调用我的web服务。 难道还有其他更好的方法吗?正如我在文章中提到的那样,我确实试图利用正则表达式来接受这种数据模式,但这并不奏效。 – 2012-04-28 16:32:12

+0

如果他们不会打电话与编码的网址,我建议你使用网络安全ID和真正的ID作为2个单独的概念。每当把ID交给前端时,总是给他们安全的网页(不用斜杠),当在内部工作时,使用真正的网页。但是,我不认为它太多要求前端编码值。他们必须为所有请求及其简单的方法调用执行此操作。不幸的是,它在xml中有点像<, >,它需要编码。有时你只需要在处理网址时生存并适应保留的字符。 – 2012-04-28 17:22:11