• 总结springboot项目中一些后端接收前端传参的方法



    先创建一个springboot项目,并在pom文件中添加web依赖:

    <dependency>
          <groupId>org.springframework.bootgroupId>
          <artifactId>spring-boot-starter-webartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    创建user对象:

    public class User {
    
        private String name;
    
        private Integer age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    创建一个controller:

    @RestController
    @RequestMapping("/store")
    public class TestController {
    
      
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1、java方法入参里面什么注解都没有

    /**
         * 第一种:java方法入参里面什么注解都没有
         * */
    
        @RequestMapping("/noAnnotation")
        public String noAnnotation(User user){
            return user.toString();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    结果
    在这里插入图片描述

    适用于:请求参数比较少
    缺点:请求参数比较多的时候,可能会丢参数,因为get请求有长度限制。

    如果参数重复了,比如:http://localhost:8080/store/noAnnotation?age=18&age=20&name=yuanhaoz,参数中age有两个,一个等于18,另一个等于20,如果是int类型的则取最先声明的那个;如果是String类型的,则会叠加
    在这里插入图片描述

    2、@PathVariable这种方式接收URL路径参数作为参数

    /**
         * 第二种:不使用?&来拼接参数
         * */
        @RequestMapping("/havaPathVariable/{name}/{age}")
        public String havaPathVariable(@PathVariable(value = "name")String name, @PathVariable(value = "age")int age ){
            return name+age;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    @PathVariable根据value将url中的参数取出来

    结果:
    在这里插入图片描述

    适用于:参数比较少,以及动态接口情况

    如何改成参数非必传:
    不仅要在@PathVariable()中加required = false,还要设置多个url path,这是因为url要求带参,属于REST参数。
    在这里插入图片描述
    结果:
    在这里插入图片描述
    如果只设置required = false话,是无法请求的。
    在这里插入图片描述

    3、@RequestBody这种方式接收前端发送过来的请求体

    /**
         * 第三种:@RequestBody
         * */
        @RequestMapping("/haveRequestBody")
        public String haveRequestBody(@RequestBody User user){
            return user.toString();
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    结果:
    在这里插入图片描述
    这个注解会从http请求的body当中拿到json,并且反序列化成java对象
    适用于:请求参数非常多(因为body没有长度限制)
    如果参数重复了,无论什么类型取声明的最后一个
    在这里插入图片描述
    解析list怎么写
    body:
    在这里插入图片描述
    controller:
    在这里插入图片描述
    解析嵌套对象怎么写
    body:
    在json中的每个对象里添加一个phone对象
    在这里插入图片描述

    创建phone对象(可以根据json中的phone对象创建所有字段,也可设置部分字段)

    
    public class Phone {
        private String name;
    
        private String code;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getCode() {
            return code;
        }
    
        public void setCode(String code) {
            this.code = code;
        }
    
        @Override
        public String toString() {
            return "Phone{" +
                    "name='" + name + '\'' +
                    ", code='" + code + '\'' +
                    '}';
        }
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    User中要添加与json中对应的对象,才会将json中的嵌套对象解析出来。
    在user对象中添加phone,并修改tostring方法
    在这里插入图片描述
    controller:
    在这里插入图片描述
    结果:
    在这里插入图片描述

    4、RestFul风格

    概念

    Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
    在这里插入图片描述

    功能

    资源:互联网所有的事物都可以被抽象为资源
    资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。
    分别对应 添加、 删除、修改、查询。
    传统方式操作资源:通过不同的参数来实现不同的效果!方法单一,post 和 get
    http://127.0.0.1/item/queryItem.action?id=1 查询,GET
    http://127.0.0.1/item/saveItem.action 新增,POST
    http://127.0.0.1/item/updateItem.action 更新,POST
    http://127.0.0.1/item/deleteItem.action?id=1 删除,GET或POST
    使用RestFul操作资源:可以通过不同的请求方式来实现不同的效果!如下:请求地址一样,但是功能可以不同!
    http://127.0.0.1/item/1 查询,GET
    http://127.0.0.1/item 新增,POST
    http://127.0.0.1/item 更新,PUT
    http://127.0.0.1/item/1 删除,DELETE
    相比于传统方式使用链接来访问请求,Resful可以通过使用通过不同的请求方式来达到不同的效果

    基本使用

    
        @RequestMapping("/noAnnotation",method = {RequestMethod.GET})
        public String noAnnotation(User user){
            return user.toString();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    也可通过将RequestMapping替换为:

    @GetMapping
    @PostMapping
    @PutMapping
    @DeleteMapping
    @PatchMapping
    
    • 1
    • 2
    • 3
    • 4
    • 5

    例如:

    
        @GetMapping("/noAnnotation")
        public String noAnnotation(User user){
            return user.toString();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注:所有的地址栏请求默认都会是 HTTP GET 类型的。

  • 相关阅读:
    【BurpSuite】插件开发学习之J2EEScan(下)-主动扫描(21-30)
    【Spring】 Spring中的IoC(控制反转)
    HMS Core基于地理位置请求广告,流量变现快人一步
    Python考前综合练习-第六章[python123题库]
    [Matlab]基于LSTM+NSGA2的风光火力发电策略优化
    腾讯云防火墙是干啥的?有哪些优势?适用于哪些场景?
    刷题笔记17——KMP
    《淘宝电商业务场景》API接口教程获得淘口令真实url
    Python 潮流周刊第 42 期(摘要)+ 赠书《流畅的Python》6本
    企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
  • 原文地址:https://blog.csdn.net/m0_51963973/article/details/130834692