我如何访问从不同的url-s请求POST数据到一个控制器方法,例如我有/countries
和/countries/{id}
URL,它与第一个一起工作得很好,因为我的代码是
@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) {
}
当我尝试从第二个 url 请求 POST 数据时,我得到
HTTP Status 405 - Request method 'POST' not supported
这是意料之中的,因为我还没有带有此映射的 POST 方法,但是如果我将一个映射方法变成一个方法,我的代码将太丑陋了,我可以使用什么解决方案?
哼哼为什么不把值的"数组"也添加到你的第二个方法中呢?
@RequestMapping(value = {"", "/{id}"},method = RequestMethod.POST)
public String deleteCountry(ModelMap model,
HttpServletRequest request) {
顺便说一句,使用 POST 动词调用一个看起来像会删除资源的动作似乎是错误的,它应该是一个 DELETE 动词
编辑 但实际上,您应该创建 2 个方法,因为这两个方法不应该做同样的事情。
POST
/countries
应该创造国家资源
POST
/countries/{id}
应该做点别的事情。
对于更新,首选PUT
/countries/{id}
对于删除,最好DELETE
/countries/{id}
有一种方法可以为不同的控制器设置单独的处理程序拦截器。 有关详细信息,请参阅此链接。
将 Spring 处理程序拦截器仅绑定到一个控制器
但我觉得,您可以为此创建一个通用方法来共享业务逻辑可能会很好。 由于拦截器带有控制器的代理类,除非您有复杂的逻辑,否则可以避免。