烧脑巨作,Spring Boot请求处理(常用参数注解使用)

烧脑巨作,Spring Boot请求处理(常用参数注解使用),第1张

注解:

注解主要是用于rest风格的搭配使用,在请求路径中不再以k : v的形式给出请求参数与值;而是直接给定一个值。如果方法参数是一个Map<String, String>将会包含路径中所有的变量与值。

访问 :浏览器输入路径变量即可,以下是rest风格的get请求的展示,直接在地址栏发起请求就是一个get请求

获取所有访问路径上的请求参数:localhost:8080/ car/{id}/owner/{username}age=19&inters=

该注解主要用于获取请求头header中的数据,客户端请求之后可以拿到一些头部携带的参数。支持传统的SpringMVC,也支持WebFlux响应式。如果方法参数是一个Map<String, String>将会包含所有的请求头与值

测试:

主要用于获取请求参数名称,设置参数是否可有可无以及默认值。

@RequestParam注解详解地址: blogcsdnnet/weixin_4380 …

主要用于获取Cookie值

主要用在 请求转发 时,如果页面无法直接跳转(如WEB-INF下的success页面)可以使用转发的手段。当进行转发时可以在请求中携带上请求的参数,转发会携带上一次请求的参数(一次完整的请求包括转发)

由于是同一次请求,因此也可以直接拿到原生的>

推荐/置精: 简单的方法就是拼请求url 下面是get方式的,如果规定是post方式,你就换成post方式

get方式如下:

apiphpmod=topic&code=dorecd&app_key=A&app_secret=B&username=C&password=D&tid=E

其中: A 和B是你事先申请或者其他方式获得的通行号及密码,C和D应该有说明是微博的账号和密码,但是是微博发布人的还是推荐人的,这个你要看API说明文档,E为要推荐微博的id 至于这个id怎么获得,还要看说明文档了

一般用>

可接收QueryString参数或 Content-Type: mutilpart/form-data的表单参数

或 Content-Type: application/x->

@Api:用在类上,说明类的作用

    tags:“标签,可以在UI界面上看到的注解”

    value:url的路径值,在类上使用的路由,如果类上没有配置,此注解无效

    position:如果配置多个Api 想改变显示的顺序位置

    protocols:协议

    hidden:配置为true 将在文档中隐藏

    produces:返回的文件的MIME类型,例如application/json,application/xml

    consumes:需要的文件的MIME类型,

    authorizations:认证

@ApiSort:排序

    value:int值

@ApiOperation:用在方法上,用来给API增加方法说明。

    value=“说明方法的用途、作用”

    notes=“方法的备注说明”

    tags:如果设置这个值、value的值会被覆盖

    description:对api资源的描述

    basePath

    position

    protocols

    hidden

    response:返回的对象,例如(Beanclass)

    responseContainer:返回的内容,有效的 “List”, “Set” or “Map”,其他无效

    >

因为一次在做项目的时候需要扫描接口的信息,其中包括参数名,遇到了点障碍就想着把这个解决方案和问题讲一下。

我们要查看的方法如下

java18以后,官方提供了反射的方法能获取到接口的参数名称。示例如下。其中getParameters方法是18才开始提供的。并且需要在javac编译时,加上-parameters参数才行。

通过javap -p -v可以查看class的字节码,如下

其中MethodParameters就是18后在字节码中记录参数名的地方。但是18之前是怎么实现的呢?

spring中有个ParameterNameDiscoverer接口,他有6个实现类。如下:

Aspect开头的都是对增强类的信息获取。我用不到。

PrioritizedParameterNameDiscoverer是一个链表,就是记录一系列的Discoverer。

这个Discoverer就是封装了JDK18的getParameters

这个类是重点,它通过asm获取了class文件的LocalVariableTable信息。class,字节码如下:

其中有一行字节码记录了LocalVariableTable信息,LocalVariableTable里不仅保存了参数名,还保存了其他局部变量信息。spring通过slot来判定哪些是参数以及参数的顺序。

但是LocalVariableTable不是类的必须信息,所以不是编译后必须存在的。只有在javac时-g或-g:vars时,才会保存LocalVariableTable信息。

在idea工具中,我们可以通过如下方式,关闭编译时,自动生成LocalVariableTable来尝试查看字节码。

这个Discoverer就是在18时多添加了个StandardReflectionParameterNameDiscoverer。

在ParameterNameDiscoverer接口上有这么段注释:

它告诉我们,不是任何时候都能获取到参数名的,只能尝试去获取。

当我们关闭了class debug信息,并且将编译级别设置为16时,启动一个简单的spring boot项目。在idea中关闭 *** 作如下:

controller如下:

我们会发现这时候访问该接口传递info参数会报如下错误:

所以,spring mvc中也是有可能获取不到方法参数名的。如果我们需要使用spring mvc的话,最好通过Require等注解来绑定。

以上就是关于烧脑巨作,Spring Boot请求处理(常用参数注解使用)全部的内容,包括:烧脑巨作,Spring Boot请求处理(常用参数注解使用)、Java 注解的读取注解信息的方法、给你一个api接口,给你必选参数。怎么获得数据。Java。 详细看图。怎么获取数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9674600.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存