SpringBoot Controller接收参数的几种常用注解方式

SpringBoot Controller接收参数的几种常用注解方式,第1张

今日份鸡汤:一岁一礼,一寸欢喜,往后余生,积极向上的生活,热气腾腾的活着。

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 请求映射原理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9754567.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)