Required request parameter ‘token‘ for method parameter type xxxx is not present 解决方式

导读:本篇文章讲解 Required request parameter ‘token‘ for method parameter type xxxx is not present 解决方式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

        昨天系统有个绑定手机号的功能接口,绑定提交一直报错不好使,报错如下:

GlobalExceptionHandler.exceptionHandler:message:Required request parameter 'token' for method parameter type String is not present, stackTrace:
[org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValueInternal(RequestParamMethodArgumentResolver.java:218), 
org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:193), 
org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:114), 
org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121), 
org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179), 
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146), 
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117), 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895),
......

        这个报错很明显是参数传递时出现问题,看接口代码:

    @RequestMapping(value = "/binding", method = RequestMethod.POST, produces = "application/json")
    @ResponseBody
    public Map<?, ?> bindingMobile(@RequestBody UserVo userInfo, @RequestParam(value = "token") String token) {
    // 内容省略
}

我看这个参数写法,一阵头大,POST请求,获取参数怎么还用 @RequestParam 注解,这匹配不了啊。我这边查看了请求,发现token参数是在请求头中,于是修改了接口参数:

    @RequestMapping(value = "/binding", method = RequestMethod.POST, produces = "application/json")
    @ResponseBody
    public Map<?, ?> bindingMobile(@RequestBody UserVo userInfo, HttpServletRequest request) {
       
        // 获取token
        String token = request.getHeader("token");
        
        // 下面内容省略
}

上面修改后参数获取就没问题了,接口功能也好使了。

网上有个博主列出了请求类型和参数的对应表,我觉得挺好的,引用一下:

注解 支持的类型 支持的请求类型 支持的Content-Type 请求示例
@PathVariable url GET 所有 /test/{id}
@RequestParam url GET 所有 /test?id=1
@RequestBody Body POST/PUT/DELETE/PATCH json {“id”:1}

参考资料:Required request parameter ‘xxx‘ for method parameter type xxxx is not present 解决方式_汤米•谢尔比的博客-CSDN博客

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/62170.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!