gpt4 book ai didi

spring - 当您 POST 到接受 HTTP GET 的 Controller 操作时,为什么 Spring MVC 不会抛出错误?

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:13:29 26 4
gpt4 key购买 nike

我刚刚在测试我的应用程序时注意到一个奇怪的问题。我不小心发布了一个接受 HTTP GET 的方法(这是一个错字——我有点累了),但奇怪的是 Spring 无论如何都在执行一个 GET 操作——它没有抛出错误。

这里是我正在 POST 的 GET 操作的映射:

@RequestMapping(value = "/partialMapping/{partialMappingId}/edit", method = RequestMethod.GET)
public ModelAndView edit(@PathVariable long partialMappingId) {
return new ModelAndView(view("edit"), "partialMapping",
partialMappingService.findPartialMapping(partialMappingId));
}

我所期望的是 Spring 会说,“对于 HTTP POST,没有名为/partialMapping/{partialMappingId}/edit 的操作”。

相反...如果您使用 HandlerAdapter 并将其传递给“POST”和“/partialMapping/1/edit”,它会运行我的 index 操作("/部分映射")。它不会引发错误。为什么?

这是 spring 中的错误,还是这是期望的行为?对于生产代码来说这没什么大不了的,但它肯定会使调试问题变得更加困难。

这是我在测试中用来执行 Controller 操作的代码:

protected ModelAndView handle(HttpServletRequest request, HttpServletResponse response) {
try {
final HandlerMapping handlerMapping = applicationContext.getBean(HandlerMapping.class);
final HandlerExecutionChain handler = handlerMapping.getHandler(request);
assertNotNull("No handler found for request, check you request mapping", handler);

final Object controller = handler.getHandler();
// if you want to override any injected attributes do it here

final HandlerInterceptor[] interceptors =
handlerMapping.getHandler(request).getInterceptors();
for (HandlerInterceptor interceptor : interceptors) {
final boolean carryOn = interceptor.preHandle(request, response, controller);
if (!carryOn) {
return null;
}
}

return handlerAdapter.handle(request, response, controller);
} catch(Exception e) {
throw new RuntimeException(e);
}
}

我根据对本网站问题的另一个回答找到了这段代码。

最佳答案

我相信您的测试代码模仿了尝试在 URL 和 HTTP 方法解析后 找到匹配的 Controller 方法签名的分派(dispatch)步骤。换句话说,如果你想测试 HTTP 消息绑定(bind),你就没有在正确的级别测试你的 Controller 。对于那种测试,您可能希望部署到服务器(可能在测试中嵌入 Jetty)并使用 RestTemplate 调用它。无论如何,这就是我所做的。

关于spring - 当您 POST 到接受 HTTP GET 的 Controller 操作时,为什么 Spring MVC 不会抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8186725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com