RESTful servlet URL - web.xml中的servlet-mapping

时间:2012-04-03 19:26:09

标签: java rest servlets spring-mvc url-pattern

我觉得这是一个常见的问题,但我研究过的东西还没有...

在我的web.xml中,我有一个所有REST调用的映射 -

  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>

如果网址为 -

,则效果很好
GET /rest/people

失败如果

GET /rest/people/1

我收到400 Bad Request错误,说The request sent by the client was syntactically incorrect ()。我不确定它是否已经让Spring servlet被路由了......

如何以/rest开头的任何通配符,以便妥善处理?

换句话说,我希望以下所有内容都有效 -

GET /rest/people
GET /rest/people/1
GET /rest/people/1/phones
GET /rest/people/1/phones/23

修改 - 按要求提供控制器代码

@Controller
@RequestMapping("/people")
public class PeopleController {

    @RequestMapping(method=RequestMethod.GET)
    public @ResponseBody String getPeople() {
        return GsonFactory.getInstance().toJson(LookupDao.getInstance().getPeople());
    }

    @RequestMapping(value="{id}", method=RequestMethod.GET)
    public @ResponseBody String getPerson(@PathVariable String id) {
        return GsonFactory.getInstance().toJson(LookupDao.getInstance().getPerson(id));
    }
}

答案

@matsev如果我有/那么似乎并不重要。

当我为公共视图转换变量名时,我改变了一些事情以使其有效。

原始

@RequestMapping(value="{id}", method=RequestMethod.GET)
public @ResponseBody String getPerson(@PathVariable String userId) {
    return GsonFactory.getInstance().toJson(LookupDao.getInstance().getPerson(userId));
}

我发布了什么

@RequestMapping(value="{id}", method=RequestMethod.GET)
public @ResponseBody String getPerson(@PathVariable String id) {
    return GsonFactory.getInstance().toJson(LookupDao.getInstance().getPerson(id));
}

变量名称不匹配让我进入...我将此留在这里作为对所有人的警告...匹配您的变量名称!

1 个答案:

答案 0 :(得分:4)

尝试在/之前添加{id}

@RequestMapping(value="/{id}", method=RequestMethod.GET)

如果没有它,ID将直接附加到人员网址,例如/rest/people1,而不是/rest/people/1