我觉得这是一个常见的问题,但我研究过的东西还没有...
在我的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));
}
变量名称不匹配让我进入...我将此留在这里作为对所有人的警告...匹配您的变量名称!
答案 0 :(得分:4)
尝试在/
之前添加{id}
:
@RequestMapping(value="/{id}", method=RequestMethod.GET)
如果没有它,ID将直接附加到人员网址,例如/rest/people1
,而不是/rest/people/1
。