今日份鸡汤:一岁一礼,一寸欢喜,往后余生,积极向上的生活,热气腾腾的活着。
1、请求路径中带参数 使用 @PathVariable 获取路径参数。即url/{id}这种形式。
demo:
运行结果展示:
2、@RequestParam 获取查询参数。即urlname=这种形式,用于get/post。springboot默认情况就是它,类似不写注解
demo:
运行结果展示:
3、@RequestBody获取POST请求参数
demo:
运行结果展示:
4、请求头参数以及Cookie
(1)@RequestHeader
(2)@CookieValue
demo:
方式一:
运行结果展示:
方式二:
运行结果展示:
springboot 搭建 web 框架很是方便,但是搭建的过程中会遇到很多问题过程中我遇到了这样一个问题 如下:
遇到这个错误纠结了很久 显示设置了 comibmwswebcontainerinvokeFlushAfterService 为 false , 如下
或者
虽然没有错误了但是又遇到了404 错误
这样的错误,好比当年用 servlet 的时候,说什么 response 已经使用,而再次使用,或者路径已经转发,你却在转发之后用 response 等等这样的问题,,在 springboot 中,我也以为是这样的问题,,,其实答案很简单 就是找不到这个 url!!!! 路径写错了而已
url = localhost:8080/userusername=zhangsan&age=18
众所周知 springboot 默认是 tomcat 容器 (SERVLET web类型)。我们要分析一个请求过来所经历的过程,自然要从前端总控制器(DispatchServlet)开始说起。按照 Servlet 规范,所有请求都会被tomcat容器交到 dispatchServlet 的 doService 方法中去处理。跟到这个方法中去,我们发现其中设置了变量进 request 对象,然后执行了 doDispatch 方法,这个方法才是真正实现请求处理的核心。
到此,已经可以找到 具体的请求映射了
下面分析 参数的封装原理
springboot 参数封装原理 - (jianshucom)
在上篇文章《SpringBoot应用启动原理(一) 将启动脚本嵌入jar》中介绍了SpringBoot如何将启动脚本与Runnable Jar整合为Executable Jar的原理,使得生成的jar/war文件可以直接启动
本篇将介绍SpringBoot如何扩展URLClassLoader实现嵌套jar的类(资源)加载,以启动我们的应用。
首先,从一个简单的示例开始
buildgradle
WebAppjava
执行 gradle build 构建jar包,里面包含 应用程序 、 第三方依赖 以及SpringBoot 启动程序 ,其目录结构如下
查看MANIFESTMF的内容(MANIFESTMF文件的作用请自行GOOGLE)
可以看到,jar的启动类为 orgspringframeworkbootloaderJarLauncher ,而并不是我们的 commanerfanSpringBoottheoryWebApp ,应用程序入口类被标记为了Start-Class
jar启动并不是通过应用程序入口类,而是通过JarLauncher代理启动。其实SpringBoot拥有3中不同的Launcher: JarLauncher 、 WarLauncher 、 PropertiesLauncher
SpringBoot使用Launcher代理启动,其最重要的一点便是可以自定义ClassLoader,以实现对jar文件内(jar in jar)或其他路径下jar、class或资源文件的加载
关于ClassLoader的更多介绍可参考 《深入理解JVM之ClassLoader》
SpringBoot抽象了Archive的概念,一个Archive可以是jar(JarFileArchive),可以是一个文件目录(ExplodedArchive),可以抽象为统一访问资源的逻辑层。
上例中,spring-boot-theory-100jar既为一个JarFileArchive,spring-boot-theory-100jar!/BOOT-INF/lib下的每一个jar包也是一个JarFileArchive
将spring-boot-theory-100jar解压到目录spring-boot-theory-100,则目录spring-boot-theory-100为一个ExplodedArchive
按照定义,JarLauncher可以加载内部 /BOOT-INF/lib 下的jar及 /BOOT-INF/classes 下的应用class
其实JarLauncher实现很简单
其主入口新建了JarLauncher并调用父类Launcher中的launch方法启动程序
再创建JarLauncher时,父类ExecutableArchiveLauncher找到自己所在的jar,并创建archive
在Launcher的launch方法中,通过以上archive的getNestedArchives方法找到/BOOT-INF/lib下所有jar及/BOOT-INF/classes目录所对应的archive,通过这些archives的url生成LaunchedURLClassLoader,并将其设置为线程上下文类加载器,启动应用
至此,才执行我们应用程序主入口类的main方法,所有应用程序类文件均可通过/BOOT-INF/classes加载,所有依赖的第三方jar均可通过/BOOT-INF/lib加载
在分析LaunchedURLClassLoader前,首先了解一下URLStreamHandler
java中定义了URL的概念,并实现多种URL协议(见 URL ) > 以上就是关于SpringBoot Controller接收参数的几种常用注解方式全部的内容,包括:SpringBoot Controller接收参数的几种常用注解方式、springboot 遇到的一些事、springboot 请求映射原理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力! 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)