如何将post方法应用于spring中的所有请求映射

时间:2017-08-05 19:14:08

标签: spring http spring-mvc

我如何访问从不同的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方法,但如果我将为一个映射制作一个方法,我的代码将太难看,可怕,我可以使用什么解决方案?

2 个答案:

答案 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带有控制器的代理类,除非你有复杂的逻辑,否则可以避免使用它。