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



我如何访问从不同的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 处理程序拦截器仅绑定到一个控制器

但我觉得,您可以为此创建一个通用方法来共享业务逻辑可能会很好。 由于拦截器带有控制器的代理类,除非您有复杂的逻辑,否则可以避免。

最新更新