Spring REST @RequestMapping错误提取,如果Value包含'。'

时间:2013-02-06 17:32:39

标签: spring spring-mvc

问题:

请参阅以下Spring REST示例,如果提交了诸如http://localhost:8080/site/google.com之类的请求,则Spring返回“ google ”。看起来像Spring将“。”视为文件扩展名,并提取参数值的一半。

Spring必须返回“ google.com ”。怎么办?

SiteController.java

package com.example.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/site")
public class SiteController {

@RequestMapping(value = "/{domain}", method = RequestMethod.GET)
public String printWelcome(@PathVariable("domain") String domain,
    ModelMap model) {

    model.addAttribute("domain", domain);
    return "domain";

}

}

3 个答案:

答案 0 :(得分:1)

我相信你可以在@ResourceMapping的路径变量中使用正则表达式。例如,你可以做

{domain:.[\\S]*}

你可能不得不摆弄一些正则表达式以使其正确。 ':'将路径变量名称与正则表达式分开。

答案 1 :(得分:0)

使用您的参数添加“:。+”非常简单:

此处用户名是电子邮件ID

@RequestMapping(value = "checkuser/{username:.+}" , method=RequestMethod.GET)
@ResponseBody
boolean getUserName(@PathVariable("username") String userName){ 
    boolean isUserAvailable = userDao.checkAvailable(userName); 
    return isUserAvailable; 
}

我从URL传递价值,如: baseurl/checkuser/test@test.com

答案 2 :(得分:0)

只需确保您的网址结束' /'和SiteController.java注意到..

change http://xxx/site/google.com to http://xxx/site/google.com/