【问题标题】:HTTP Status 400 - Required String parameter 'testParam' is not present in spring MVCHTTP 状态 400 - Spring MVC 中不存在必需的字符串参数“testParam”
【发布时间】:2018-05-10 21:05:48
【问题描述】:

我正在尝试了解弹簧的工作原理。 我创建了一个表单和一个控制器。我故意在方法中添加了一个与请求中的参数不匹配的参数,我收到如下错误。

HTTP 状态 400 - 所需的字符串参数“testParam”不存在

@RequestMapping("/processForm")
public String processForm(@RequestParam("testParam") String title,
        Model model){

    return "formResult";
}

<form action="processForm" method="GET" >
    <input type="text" name="hello" />
    <input type="submit" />
</form>

“testParam”的 requestParam 在这里是强制性的,所以我得到了这个错误。 我的问题是这个错误是在哪里处理的。 dispatcherServlet 是检查了方法并立即返回 404 还是尝试将其传递给控制器​​的方法并在那里发生错误?

我希望问题很清楚.. 谢谢。

【问题讨论】:

  • 这是一个通用问题,可以通过查看文档来回答。没有必要在此处发布它,因为您不需要解决方案,但您需要解释。

标签: spring spring-mvc servlets


【解决方案1】:

控制器方法没有被调用,处理和参数检查在这个调用之前完成。处理流程是这样的:

DispatcherServlet.doDispatch() -> RequestMappingHandlerAdapter.invokeHandlerMethod() -> ServletInvocableHandlerMethod.invokeForRequest() -> InvocableHandlerMethod.getMethodArgumentValues() -> HandlerMethodArgumentResolver.resolveArgument()

此时检测到所需参数不匹配并抛出MissingServletRequestParameterException

DefaultHandlerExceptionResolver 处理 MissingServletRequestParameterException 导致响应状态码为:Bad Request 400。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-12
    • 2015-02-12
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 2023-03-23
    相关资源
    最近更新 更多