@PathVariable、@RequestBody、@RequestParam、@ResponseBody、@Param的详解和用法

简介: @PathVariable、@RequestBody、@RequestParam、@ResponseBody、@Param的详解和用法

一、@PathVariable

1.首先Restful方法的基本概念:


REST架构的主要原则


对网络上所有的资源都有一个资源标志符。


对资源的操作不会改变标识符。


同一资源有多种表现形式(xml、json)


所有操作都是无状态的(Stateless)


具体例子:


https://github.com/git

https://github.com/git/git

https://github.com/git/git/blob/master/block-sha1/sha1.h

https://github.com/git/git/commit/e3af72cdafab5993d18fae056f87e1d675913d08

https://github.com/git/git/pulls

https://github.com/git/git/pulls?state=closed

https://github.com/git/git/compare/master…next

————————————————

版权声明:本文为CSDN博主「小汤源.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/lxy_lixinyuan/article/details/109906171


2.@PathVariable定义



通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器(controller)处理方法的形参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的形参中。



3.明确一个URI的具体格式


具体URI的格式如下:


 [协议名] : // [用户名] : [密码] @ [服务器地址] : [服务器端口号] / [路径] ? [查询字符串] # [片段ID]


例:http://kkoneone:password@www.baidu.com:80/main/index.html;type=a;color=b?name=bob&id=123#main


而?后面的通常是URL路径参数,路径部分一般是"/xx"这样的,所以GetMapping中通常会用到("/id"),而PutMapping等其他的一般是不需要。

+25.png
+26.png4.使用方法

4.1方法参数名称和需要绑定的url中变量名称一致时

//请求路径:http://196.0.0.1/getUser/tom

@RequestMapping("/getUser/{name}")
    public User getUser(@PathVariable String name){
        return userService.selectUser(name);
    }

4.2方法参数名称和需要绑定的url中变量名称不一致时

用PathVariable注明,相当于备注了url变量名称就是方法参数名

@RequestMapping("/getUserById/{name}")
    public User getUser(@PathVariable("name") String userName){
        return userService.selectUser(userName);
    }

二、@RequestParam

1.@RequestParam定义:


@RequestParam (org.springframework.web.bind.annotation.RequestParam)用于将指定的请求参数赋值给方法中的形参。


2.小细节


如果参数前写了@RequestParam(xxx),那么前端必须有对应的xxx名字才行(不管其是否有值,当然可以通 过设置该注解的required属性来调节是否必须传),如果没有xxx名的话,那么请求会出错,报400。

如果参数前不写@RequestParam(xxx)的话,那么就前端对应的xxx名字有无都行,如果有xxx名的话,那么就会自动匹配;没有的话,请求也能正确发送。

3.使用方法


处理URL的控制方法中获取URL中的参数,也就是?key1=value1&key2=value2这样的参数列表


3.1

//请求路径:http://127.0.0.1/user/?name=tom
@RequestMapping(value="/user")
public String getUserBlog(@RequestParam(value="name") String username) {
    return name;
}

三、@RequestBody

1.一般请求中返回体是json格式的(是一个集合、某个类)就会需要用到RequestBody。而也有特殊情况,前端发送一个参数但是用一个实体类接收(方便后面复用),这个时候就不需要RequestBody。

+27.png
+28.png
2.细节


后端参数是以@RequestBody修饰,前端传回的json数据时:


后端@RequestBody注解对应的类在将HTTP的输入流(含请求体)装配到目标类(即:@RequestBody后面的类)时,会根据json字符串中的key来匹配对应实体类的属性,如果匹配一致且json中的该key对应的值符合(或可转换为), 实体类的对应属性的类型要求时,会调用实体类的setter方法将值赋给该属性。

json字符串中,如果value为""的话,后端对应属性如果是String类型的,那么接受到的就是"",如果是后端属性的类型是Integer、Double等类型,那么接收到的就是null。

json字符串中,如果value为null的话,后端对应收到的就是null。

如果某个参数没有value的话,在传json字符串给后端时,要么干脆就不把该字段写到json字符串中;要么写value时, 必须有值,null 或""都行。

3.使用

@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping("/addUser")
    public void addUser(@RequestBody User user){
        System.out.println(user);
    }
}

四、@ResponseBody

1.@ResponseBody注解的作用是将controller的方法返回的对象通过转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。是JavaBean对象转化为json格式,然后返回给前端。


2.使用方法:


@ResponseBody注解是写在方法上的

+29.png
3.细节:


在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。


五、@Param

1.概念:


@Param的作用是服务于SQL语句中的参数数值


@Param的作用就是给参数命名,比如在mapper里面某方法A(int id),添加注解后变成A(@Param("userId") int id)。当外部想要取出传入的id值,只需要取它的参数名userId就可以了。将参数值传如SQL语句中,通过#{userId}进行取值给SQL的参数赋值。


2.方法


2.1 @Param注解基本类型的参数


mapper、dao中的方法:

public User selectUser(@Param("userName") String name,@Param("userId") String id);

映射到xml中的<select>标签

<select id="selectUser" resultMap="User">  
   select * from user  where user_name = #{userName} and user_id=#{userId}  
</select>

#{userName} and  #{password}中的userName和password都是从注解@Param()里面取出来的,取出来的值就是方法中形式参数 String name 和 String pwd的值。


2.2@Param注解JavaBean对象


mapper中的方法:  

public List<User> getAllUser(@Param("user") User u);

映射到xml中的<select>标签

<select id="getAllUser" parameterType="com.vo.User" resultMap="userMapper">  
        select   
        from user t where 1=1  
             and   t.user_name = #{user.userName}  
              and   t.user_age = #{user.userAge}  
    </select>  

@RequestParam和@PathVariable的区别

@PathVariable是在URL路径部分,@RequestParam是在请求参数部分


@PathVariable,例如/user/1

@RequestParam,例如user?userId=1

URL的设计选择:


1、当URL指向的是某一具体业务资源(或资源列表),例如博客,用户时,使用@PathVariable


2、当URL需要对资源或者资源列表进行过滤,筛选时,用@RequestParam


例如我们会这样设计URL:


/blogs/{blogId}

/blogs?state=publish而不是/blogs/state/publish来表示处于发布状态的博客文章




@Param 与@RequestParam的区别

@Param 是mybatis注解,@RequestParam是Springboot的注解

@Param使用在DAO层函数,@RequestParam使用在Controlller层函数

@Param与XML的参数关联对应,@RequestParam与html前端请求参数关联对应

参考文章:


https://blog.csdn.net/originations/article/details/89492884


相关文章
|
Java 容器
如何在SpringBoot项目中使用过滤器和拦截器
过滤器和拦截器是日常开发中常用技术,用于对特定请求进行增强处理,如插入自定义代码以实现特定功能。过滤器在请求到达 `servlet` 前执行,而拦截器在请求到达 `servlet` 后执行。`SpringBoot` 中的拦截器依赖于 `SpringBoot` 容器,过滤器则由 `servlet` 提供。通过实现 `Filter` 接口并重写 `doFilter()` 方法可实现过滤器;通过实现 `HandlerInterceptor` 接口并重写相应方法可实现拦截器。两者的主要区别在于执行时机的不同,需根据具体场景选择使用。
951 4
如何在SpringBoot项目中使用过滤器和拦截器
|
监控 Java Spring
Spring Boot 拦截器(Interceptor)详解
本文介绍Spring Boot拦截器的原理与使用,涵盖自定义拦截器创建、注册配置、执行顺序及典型应用场景,助力提升系统安全性与可维护性。(238字)
1266 1
|
XML JSON Java
【Java用法】@RequestParam、@RequestBody、@ResponseBody和@PathVariable的使用与区别
【Java用法】@RequestParam、@RequestBody、@ResponseBody和@PathVariable的使用与区别
1135 0
|
缓存 Java 数据库
微服务——SpringBoot使用归纳——Spring Boot中使用监听器——监听器介绍和使用
本文介绍了在Spring Boot中使用监听器的方法。首先讲解了Web监听器的概念,即通过监听特定事件(如ServletContext、HttpSession和ServletRequest的创建与销毁)实现监控和处理逻辑。接着详细说明了三种实际应用场景:1) 监听Servlet上下文对象以初始化缓存数据;2) 监听HTTP会话Session对象统计在线用户数;3) 监听客户端请求的Servlet Request对象获取访问信息。每种场景均配有代码示例,帮助开发者理解并应用监听器功能。
691 0
|
JSON 前端开发 数据格式
@RequestBody、@RequestParm、@PathVariable三个注解的区别
@RequestBody、@RequestParm、@PathVariable三个注解的区别
1155 2
|
XML JSON 前端开发
获取后端接口请求中的参数(@PathVariable,@RequestParam,@RequestBody区别,使用postman请求
获取后端接口请求中的参数(@PathVariable,@RequestParam,@RequestBody区别,使用postman请求
919 1
|
JSON Java 测试技术
SpringBoot实用开发篇第二章(测试操作)
SpringBoot实用开发篇第二章(测试操作)
|
数据采集 SQL 前端开发
Java SpringBoot自动化网页爬虫项目
这是一个基于Java Spring Boot的自动化网页爬虫平台,采用图形化界面定义爬虫流程,无需编写代码。该平台高度灵活且可配置,支持Xpath、JsonPath、CSS选择器及正则表达式等多种提取方式,兼容JSON、XML和二进制格式,并支持通过代理服务器访问。它还具备自动管理Cookie、保存数据至数据库或文件、自定义函数和SQL脚本等功能,同时集成了任务监控和日志记录系统。此外,平台支持HTTP接口调用和动态网页抓取,可通过Selenium模拟真实浏览器行为。用户可通过直观的操作界面轻松完成复杂的数据抓取任务。
479 0
|
XML Java Maven
如何将MultipartFile转换为File
该文介绍了MultipartFile(Spring框架)与File(Java标准库)的区别,主要讨论了如何将MultipartFile转换为File的三种方法:使用`transferTo`、`FileOutputStream`和Java NIO,并提到了File转MultipartFile常用于测试,可通过MockMultipartFile实现。
963 0
|
JSON 前端开发 Java
前端axios传参总结
该文介绍了在前后端分离的开发中,前端使用axios向后端Spring传递参数的两种主要方法。针对@RequestParam注解,推荐使用params传参,将参数格式化为x-www-form-urlencoded,或者使用FormData和qs.stringify。对于@RequestBody,Axios的data传参默认为JSON格式,直接传入对象即可。
846 0