我如何访问从不同的url-s请求POST数据到一个控制器方法,例如我有/countries
& /countries/{id}
网址,第一个网站的效果非常好,因为我的代码是
@RequestMapping(value = {"/{id}", "/{id}/"}, method = RequestMethod.GET)
public String getCountry(@PathVariable(value = "id", required = true) int id,ModelMap model) {
}
@RequestMapping(method = RequestMethod.POST)
public String deleteCountry(ModelMap model,HttpServletRequest request) {
}
当我尝试从第二个网址请求POST数据时,我正在
HTTP Status 405 - Request method 'POST' not supported
这是可以预料到的,因为我没有使用这种映射的POST方法,但如果我将为一个映射制作一个方法,我的代码将太难看,可怕,我可以使用什么解决方案?
答案 0 :(得分:3)
哼哼为什么不添加"数组"对你的第二种方法有价值吗?
@RequestMapping(value = {"", "/{id}"},method = RequestMethod.POST)
public String deleteCountry(ModelMap model,
HttpServletRequest request) {
顺便说一句,使用POST动词调用一个看起来会删除资源的动作似乎不对,它应该是一个DELETE动词使用
EDIT 但实际上,你应该创建两种方法,因为这两种方法都不应该做同样的事情。
POST
/countries
应该创建国家/地区资源
POST
/countries/{id}
应该做其他事情。
如需更新,请选择PUT
/countries/{id}
要删除,请更喜欢DELETE
/countries/{id}
答案 1 :(得分:1)
有一种方法可以为不同的控制器提供单独的处理程序拦截器。 有关详细信息,请参阅此链接。
bind Spring HandlerInterceptor only to one controller
但是我觉得,你可以创建一个共同的方法来共享业务逻辑。 因为Interceptor带有控制器的代理类,除非你有复杂的逻辑,否则可以避免使用它。