我想了解春天的运作方式.. 我创建了一个表单和一个控制器。我故意在方法中添加了一个参数,该参数与请求中的参数不匹配,我得到如下错误。
HTTP状态400 - 必需字符串参数' testParam'不存在
CMMotionActivityManager.isActivityAvailable()
requestParam是" testParam"这是必须的,所以我得到这个错误。 我的问题是这个错误的处理位置。 dispatcherServlet是否检查了方法并立即返回404,或者是否尝试将其传递给控制器的方法并且错误发生在那里?
我希望问题很清楚..谢谢。
答案 0 :(得分:1)
未调用控制器方法,在此调用之前完成处理和参数检查。处理流程如下:
DispatcherServlet.doDispatch() - > RequestMappingHandlerAdapter.invokeHandlerMethod() - > ServletInvocableHandlerMethod.invokeForRequest() - > InvocableHandlerMethod.getMethodArgumentValues() - > HandlerMethodArgumentResolver.resolveArgument()
此时检测到所需参数不匹配且抛出MissingServletRequestParameterException
。
DefaultHandlerExceptionResolver
处理MissingServletRequestParameterException
会导致状态代码为错误的回复:错误请求400。