Spring接收前端传递数据的方式

news2024/10/7 2:26:14

 搭建项目

 

 

 

              然后点击下一步完成即可搭建成功

        在pom文件中导入lombok的jar包,帮助我们快速创建实体类

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version> 
        </dependency>

创建实体类User和Cat

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer id;
    private String name;
    private String word;
    private Cat cat;
    private List<Cat> cats;
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Cat {
    private Integer id;
    private String breed;
    private String name;
}

传递非JSON格式的数据

主键:

        @RequestParam 主要用于在Spring MVC后台控制层获取参数,它有三个常用参数  

               1).  defaultValue 表示设置默认值

               2). required 表示该参数是否必传

               3). value 值表示接收传入的参数的key        

        @PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出URL模板中的变量作为参数

        1.前端请求参数的key需和后端控制层处理请求的方法参数名称一致

  @RequestMapping("get1")
    public void get(String name,String word){
        System.out.println(name+":"+word);
    }

         2.前端请求参数的key需和后端控制层处理请求的方法参数名称不一致

 @RequestMapping("get2")
    public void get2(@RequestParam("n") String name,@RequestParam("w") String word){
        System.out.println(name+":"+word);
    }

         3.前端请求参数的key和后端控制层处理请求方法的参数pojo实体类的属性名称一致

@RequestMapping("get3")
    public void get3(User user){
        System.out.println(user);
    }

        4.使用@PathVariable注解将请求URL中的模板变量映射到功能 处理方法的参数上,如果模板变量名称和方法的参数名称不同需要在@PathVariable注解上显示的指定映射关系

  @RequestMapping("get4/{name}/{word}")
    public void get4(@PathVariable("name") String name,@PathVariable("word") String word){
        System.out.println(name+""+word);
    }

 

        5.通过HttpServletRequest对象获取数据,前端请求参数的key需和getParameter(String name)方法传递的参数名称一致

    @RequestMapping("get5")
    public void get5(HttpServletRequest request){
        String id = request.getParameter("id");
        String name = request.getParameter("name");
        String word = request.getParameter("word");
        System.out.println(id+""+name+""+word);
    }

传递JSON格式的数据

        如果前端通过application/json类型提交JSON格式的数据给后端控制层处理请求的方法,方法的参数必须使用@RequestBody注解进行修饰,才能接收来自前端提交的JSON数据

    @RequestMapping("get6")
    public void get6(@RequestBody User user){
        System.out.println(user);
    }

                1.单个实体接收参数

                前端传递的json的数据:

{
    "id":1003,
    "name":"小元",
    "word":"123"
}

                2. 实体嵌套实体接收参数

                前端传递的json的数据:

{
    "id":1,
    "name":"张三",
    "word":123,
    "cat":{
        "id":1001,
        "breed":"小白",
        "name":"白白"
    }
}

 

                3. 实体嵌套List集合接收参数

                前端传递的json的数据:

{
    "id":1,
    "name":"张三",
    "word":123,
    "cat":{
        "id":1001,
        "breed":"小白",
        "name":"白白"
    },
    "cats":[
       {
        "id":1002,
        "breed":"小黑",
        "name":"黑黑"
    },
      {
        "id":1003,
        "breed":"小启",
        "name":"启启"
    },
       {
        "id":1004,
        "breed":"小蓝",
        "name":"蓝蓝"
    }
    ]
}

 

                4. Map集合接收参数

 @RequestMapping("get7")
    public void add10(@RequestBody Map<String,Object> m){//传递List类型的集合数据
        Integer id = (Integer) m.get("id");
        String name = (String) m.get("name");
        String word = (String) m.get("word");

        System.out.println(id+"\t"+name+":"+word);


        System.out.println("========");
        Map<String,Object> cat = (Map<String, Object>) m.get("cat");
        Set<String> s = cat.keySet();
        for (String s1 : s) {
            System.out.println(s1+":"+ cat.get(s1));
        }


        System.out.println("========");

        List< Map<String,Object>> course = (List<Map<String, Object>>) m.get("cats");

        for (Map<String, Object> cs : course) {
            Set<Map.Entry<String, Object>> e = cs.entrySet();
            for (Map.Entry<String, Object> ss : e) {
                System.out.println(ss.getKey()+":"+ss.getValue());
            }

        }

    }

                前端传递的json的数据:

{
    "id":1,
    "name":"张三",
    "word":"123",
    "cat":{
        "id":1001,
        "breed":"小白",
        "name":"白白"
    },
    "cats":[
       {
        "id":1002,
        "breed":"小黑",
        "name":"黑黑"
    },
      {
        "id":1003,
        "breed":"小启",
        "name":"启启"
    },
       {
        "id":1004,
        "breed":"小蓝",
        "name":"蓝蓝"
    }
    ]
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/743969.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯云服务器CPU处理器大全_性能测评

腾讯云服务器CPU采用什么处理器型号&#xff1f;主频睿频多少&#xff1f;腾讯云服务器CPU性能如何&#xff1f;云服务器CVM规格不同CPU型号也不同&#xff0c;轻量应用服务器的CPU处理器性能如何&#xff1f;腾讯云服务器网分享腾讯云服务器CPU处理器大全&#xff1a; 目录 …

Win10+Anaconda+RTX3070+Pytorch-GPU深度学习环境搭建

一、CUDA安装 1. 查询CUDA driver版本&#xff1a; 2. 下载并安装&#xff1a; CUDA Toolkit Archive | NVIDIA DeveloperPrevious releases of the CUDA Toolkit, GPU Computing SDK, documentation and developer drivers can be found using the links below. Please sele…

MFC第十五天 HWND与CWnd对象之间的转换、CWnd类简介(补充)、员工管理系统登录界面眼睛捕获(补充)

文章目录 HWND与CWnd对象之间的转换CWnd类简介&#xff08;补充&#xff09;cwnd系统函数Coordinate Mapping Functions 坐标系转换窗口树 Window tree access计时器管理Window Access Functions 窗口访问功能Window Text Functions 窗口文本函数Window State FunctionsCMenu F…

matlab将0 1矩阵显示为黑白图像

解决方法 clear clc pattern cell2mat(struct2cell(load("pattern"))); pic1 squeeze(pattern(1:64,:,:,:)); pic1 logical(permute(pic1, [2,3,1])); temp pic1(:,:,1); imshow(pic1(:,:,1));显示效果 test int8(rand(30,30)); imshow(logical(test));本来想…

CANoe运行时改变系统变量的值的几种方式

在CANoe运行时,想要随时改变系统变量的值为任意值,怎么办?(这里的值指的是数值) 我们在CANoe工程上创建一个系统变量: 改变系统变量的值,我们第一时间想到的是在CAPL中用代码实现: on key a {@sysvar::ControlPanel::EngineSpeed = 10; }通过一个按键’a’的事件程序…

前端选择时间范围关联日期快速查询

效果图 html部分 <div class"select-list"><ul><li><label>时间&#xff1a;</label><select id"timeInterval"><option value"1">自定义</option><option value"2">当天<…

手机切换ip地址会遇的问题以及解决方法汇总

手机切换IP地址是一种常见的操作&#xff0c;它可以帮助用户解决一些网络问题&#xff0c;提高网络连接速度&#xff0c;或者绕过某些限制。然而&#xff0c;在进行IP地址切换时&#xff0c;用户可能会遇到一些问题。本文将详细介绍手机切换IP地址可能遇到的问题&#xff0c;并…

一、rocketmq整体架构及nameServer源码分析

RocketMQ源码深入剖析 1 RocketMQ介绍 RocketMQ 是阿里巴巴集团基于高可用分布式集群技术&#xff0c;自主研发的云正式商用的专业消息中间件&#xff0c;既可为分布式应用系统提供异步解耦和削峰填谷的能力&#xff0c;同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠…

前端Vue仿美团地址管理列表组件

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。 通过组件化开发&#xff0c;可以有效实现…

将Xvfb和Chrome封装到Docker镜像中并执行java程序

docker pull ubuntu:22.04docker run -itd --net host -v /home/:/home ubuntu:22.04 进入容器 docker exec -it 8203e24ed bash apt-get update apt-get install xvfb apt-get install chromium-browser apt install chromium-chromedriver apt install openjdk-11-jdk …

webpack打包

webpack打包 1、webpack再次打包2、webpack的入口和出口 1、webpack再次打包 背景&#xff1a;代码增加之后&#xff0c;如何打包呢&#xff1f; 1、确保在src/index.js引用和使用 2、重新执行yarn build打包命令 2、webpack的入口和出口 1、新建webpack.config.js配置文件 …

五、Spring 注解开发

文章目录 一、使用注解开发的环境准备二、Spring 框架核心注解学习2.1 Component2.1.1 通过注解来控制 Bean 的作用域&#xff08;Scope&#xff09; 2.2 Component 的派生注解&#xff08;对应这 web 开发的三层架构分层&#xff09;2.2.1 Repositor2.2.2 Service2.2.3 Contro…

6.2.6 网络基本服务----电子邮件系统(E-mail)

6.2.6 网络基本服务----电子邮件系统&#xff08;E-mail&#xff09; 电子邮件系统是因特网上使用的最多且最受用户欢迎的一种应用 电子邮件系统包括用户代理和邮件服务器&#xff0c;提供收发邮件、邮件传送服务&#xff0c;邮件被传送到收信人邮件服务器的收信人信箱中&…

这所C9考数二英二!但409分被刷,387分直接放弃复试!

一、学校及专业介绍 西安交通大学简称“西安交大”&#xff0c;位于陕西省西安市&#xff0c;是中华人民共和国教育部直属的综合性研究型全国重点大学&#xff0c;由教育部、陕西省与国家国防科技工业局共建&#xff0c;国家“双一流”建设高校&#xff0c;首批进入国家“211工…

Sentionel流控授权规则

很多时候&#xff0c;我们需要根据调用来源来判断该次请求是否允许放行&#xff0c;这时候可以使用 Sentinel 的来源访问控制的功能。来源访问控制根据资源的请求来源&#xff08;origin&#xff09;限制资源是否通过&#xff1a; 若配置白名单&#xff0c;则只有请求来源位于…

ELK日志记录——Kibana组件——grok 正则捕获插件、mutate数据修改插件、multiline 多行合并插件、date 时间处理插件

grok 正则捕获插件 grok 使用文本片段切分的方式来切分日志事件 内置正则表达式调用 %{SYNTAX:SEMANTIC} ●SYNTAX代表匹配值的类型&#xff0c;例如&#xff0c;0.11可以NUMBER类型所匹配&#xff0c;10.222.22.25可以使用IP匹配。 ●SEMANTIC表示存储该值的一个变量声明&…

Java 查找二叉树中某一结点的前驱结点以及后继结点

文章目录 前言什么是后继结点什么是前驱结点 代码实现查找某一结点的后继结点思路代码实现图解 查找某一结点的前驱结点思路代码实现图解 测试用例运行结果 结语 前言 给定二叉树结点定义Node结构如下&#xff0c;其中parent结点指向当前Node结点的父结点,根结点指向null&…

c++ 资源文件打包exe 写出指定目录

#include <iostream> #include <fstream> #include <Windows.h>int main() {// 加载资源HMODULE hModule GetModuleHandle(NULL);// HRSRC hResource FindResource(hModule, MAKEINTRESOURCE(IDR_MYSYS), RT_RCDATA);// IMAGE 是添加资源文件时起的名字HRS…

BOSHIDA DC电源模块过载保护的原理

BOSHIDA DC电源模块过载保护的原理 DC电源模块过载保护的原理是通过电路设计和控制算法来实现的&#xff0c;其基本思想是在系统发生过载时&#xff0c;通过控制电路的工作状态和输出特性&#xff0c;实现对输出电流的限制和保护。 具体来说&#xff0c;DC电源模块的过载保护主…

智慧城市建设与数字孪生技术的紧密关联

智慧城市是当今社会发展的趋势&#xff0c;它通过智能技术和数字化手段&#xff0c;实现城市各个领域的高效运行和可持续发展。而数字孪生技术作为智慧城市建设的重要支撑&#xff0c;正在发挥着重要的作用。 首先&#xff0c;数字孪生技术在城市规划和设计方面发挥着重要作用…