首页 > 软件 > @RequestMapping后面的参数波浪号怎么解决

@RequestMapping后面的参数波浪号怎么解决

软件 2023-09-09

@RequestBody注解原理

从源码中可以看到,@RequestBody 用在方法参数上面,用来将请求参数绑定到request body中,通过 HttpMessageConverter 封装为具体的JavaBean。通俗点讲就是你在一个参数上加上该注解,spring就会将request body中的json/xml对象解析成该参数类型的Javabean对象。
作为RESTful开发中经常用到的注解,研究其原理有利于我们更好地理解并掌握它。
那么spring是如何做到这一点的呢?先来看DispatcherServlet。
作为springMVC处理请求的中央调度器,DispatcherServlet本身是一个servlet,所以我们看doService():

重点在doDispatch()方法,该方法先找到会找到合适的handler来处理当前请求:

HandlerAdapter是一个接口,具体处理方法在 RequestMappingHandlerAdapter 类中:

这里又调用了handleInternal()方法,RequestMappingHandlerAdapter重写了该方法:
进入该方法,

可以看到最终调用的都是invokeHandlerMethod()方法,此方法会处理@RequestMapping修饰的请求

进入该方法的 invocableMethod.invokeAndHandle(webRequest, mavContainer); ,来到ServletInvocableHandlerMethod,此类继承了InvocableHandlerMethod,可以处理请求的返回值。invokeAndHandle()方法:

重点在 Object returnValue = invokeForRequest(webRequest, mavContainer, providedArgs); ,通过请求调用并产生返回值。

getMethodArgumentValues() 方法的作用是获取方法参数,重点就在这里,

进入resolveArgument()方法,

@RequestBody修饰的参数会使用RequestResponseBodyMethodProcessor解析,

进入readWithMessageConverters()方法一路顺藤摸瓜,来到AbstractMessageConverterMethodArgumentResolver的readWithMessageConverters(),

可以看到使用文章开头提到的HttpMessageConverter解析参数并返回,而此处的HttpMessageConverter是在RequestMappingHandlerAdapter中设置解析器的时候添加到每个解析器中的。而json格式的数据使用AbstractJackson2HttpMessageConverter进行解析,内部使用jackson进行json数据的解析。

请求由DispatcherServlet处理,找到相应的HandlerAdapter进行处理,RequestMappingHandlerAdapter会处理@RequestMapping注解的请求,设置一系列参数解析器进行解析,如果参数使用@RequestBody注解,则使用RequestResponseBodyMethodProcessor进行解析,此参数解析器用HttpMessageConverter将HttpMessage封装为具体的JavaBean对象,json格式的数据使用AbstractJackson2HttpMessageConverter进行解析,内部使用jackson进行json数据的解析。

如何调用@requestmapping

@RequestMapping的分类 类级别的和方法级别的 @RequestMapping的几种形式: @RequestMapping(method = RequestMethod.GET) @RequestMapping(value="/{day}", method = RequestMethod.GET)//day为方法中的参数@RequestMapping (value="/new", method = RequestMethod.GET) @RequestMapping是一种通过匹配URL路径来访问相应页面的 将@RequestMapping放在类级别上 这可令它与方法级别上的@Req

Spring:Request method 'PUT' not supported

一、解决 在页面中 表单中要使用 ${pageContext.request.contextPath } 之前没有加 ${pageContext.request.contextPath } ,导致的错误。 二、简介 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解

@requestmapping包含多个参数,前台怎么传参

@RequestMapping(value="/list",method=RequestMethod.GET)
publicStringgetAll(Modelmodel){
Setsecures=redisDao.get();
model.addAttribute("secures",secures);
return"group/list";
}

@RequestMapping(value="/list",method=RequestMethod.GET,params="method=one")
publicStringgetOneUser(@RequestParam(value="name")Stringname,Modelmodel){
Setsecures=redisDao.getByName(name);
model.addAttribute("secures",secures);
return"group/list";
}

springmvc的注解都有哪些

spring mvc常用的注解: @Controller @Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为 类名称开头字母小写,你也可以自己指定,如下 方法一: @Controller public class TestController {} 方法二: @Controller("tmpController") public class TestController {} @RequestMapping 1.@RequestMapping用来定义访问的URL,你可以为整个类定义一个 @RequestMapping,或者为每个方法指定一个。 把

标签:信息技术 编程语言 未分类 前端开发 编程

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18