后端如何接受前端传过来的Json数据_前端用json.stringify,后端用什么接受参数-程序员宅基地

技术标签: java  SpringMVC  json  

使用Json前提:

引入依赖

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.9</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.9</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.9</version>
        </dependency>

SpringMVC配置

<mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8"/>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                        <property name="failOnEmptyBeans" value="false"></property>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

方式一:前端传递Json对象 <== Ajax默认格式

  <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
  <script>
  <!--Json对象-->
    var user = {
     
      "username": "hahah",
      "password": "123456"
    };

    $.ajax({
     
      url:"/testJson",
      type: "GET",
      async: true,
      data: user,//Json对象
      dataType: 'json',
      success: function (data) {
     

      }
    });
  </script>
public class User {
    
    private String username;
    private String password;
    //get、set方法
    }

(1)可省略@RequestParam注解

@Controller
public class TestJson {
    
    @RequestMapping("/testJson")
    @ResponseBody
    public String testJson(User user,String username,String password){
    
        System.out.println(user.getUsername());//hahah
        System.out.println(user.getPassword());//123456
        System.out.println(username);//hahah
        System.out.println(password);//123456
       return "aaaa";
    }
}

(2) 加@RequestParam注解

    @RequestMapping("/testJson2")
    @ResponseBody
    public String testJson2(@RequestParam String username,@RequestParam String password){
    
        System.out.println(username);//hahah
        System.out.println(password);//123456
        return "aaaa";
    }

优点:

(1)前端传递数据不用转换为Json字符串:Json.stringify(user)
(2)后端接收参数灵活:
                  ①可以是封装对象 (User)
                  ②可以是单个参数(username,password)
                  ③可以封装对象与单个参数混用(User,username或password)

方式二:传递JSON字符串给后端 <== 使用application/json格式

Content-Type使用application/json的时候,要将JSON对象转换为JSON字符串

<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>

  <script>
    var user = {
     
      "username": "hahah",
      "password": "123456"
    };

    $.ajax({
     
      url:"/testJson3",
      type: "POST",
      async: true,
      contentType: "application/json;charset=UTF-8", //使用 application/json;charset=UTF-8
      data: JSON.stringify(user), //将JSON对象转换为JSON字符串
      dataType: 'json',
      success: function (data) {
     

      }
    });
  </script>

后端接收前端Json字符串

① 后端接收前端Json字符串,只能封装在User对象中,不能单独设置参数。

    @RequestMapping(value = "/testJson3",method = {
    RequestMethod.POST})
    @ResponseBody
    public String testJson3(@RequestBody User user){
    
        System.out.println(user.getUsername());//hahah
        System.out.println(user.getPassword());//123456
        return "aaaa";
    }

② 后端接收前端Json字符串,封装到Map中

    @RequestMapping(value = "/testJson4",method = {
    RequestMethod.POST})
    @ResponseBody
    public String testJson4(@RequestBody Map map){
    
        System.out.println(map.get("username"));//hahah
        System.out.println(map.get("password"));//123456
        return "aaaa";
    }

③ 后端接收前端Json字符串,用String接收

    @RequestMapping(value = "/testJson5",method = {
    RequestMethod.POST})
    @ResponseBody
    public String testJson5(@RequestBody String user) throws IOException {
    
        System.out.println(user); // {"username":"hahah","password":"123456"}
        ObjectMapper mapper = new ObjectMapper();
        User user1 = mapper.readValue(user, User.class);
        System.out.println(user1.getUsername());//hahah
        System.out.println(user1.getPassword());//123456
        return "aaaa";
    }

优点:

(1)前端需要使用JSON.stringify()将JSON对象转为JSON字符串
(2)后端接收参数比较麻烦,没有第一种简单,也没有第一种灵活。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43843164/article/details/106409546

智能推荐

PCL VS项目编码可能出现的坑集锦_pcl 无法打开flann-gd.lib-程序员宅基地

文章浏览阅读1k次,点赞5次,收藏12次。PCLVS编码可能出现的问题1. 无法打开源文件“bits/stdc++.h” 在VS中使用#include 的方法“bits/stdc++.h”是VS的万能头。如果无法打开,则说明在需要打开的文件夹下面没有这个文件夹。那就需要做一个拷贝。找到bits/stdc++.h所在的文件夹,可以直接搜过获得。如果VS安装QT,则它可能会在QT的安装文件夹下C:\Qt6.0\Tools\mingw810_64\lib\gcc\x86_64-w64-mingw32\8.1.0\include..._pcl 无法打开flann-gd.lib

海思35xx 编程报错 mmz_userdev:ioctl_mmb_alloc: hil_mmb_alloc(, 0, 0x0, 0, ) failed!_海思 mmz_userdev:get_mmbinfo_safe: mmb(0x00000000) n-程序员宅基地

文章浏览阅读665次。海思3516 用ive写图像处理代码时报错。这个时内存申请错误,具体如下mmz_userdev:ioctl_mmb_alloc: hil_mmb_alloc(, 0, 0x0, 0, ) failed![Func]:hi_mpi_sys_mmz_alloc [Line]:866 [Info]:system alloc mmz memory failed!报错信息说的很明白了,这是一个内存申请时的报错。从第一行可以看出,申请大小为0的内存失败。定位到申请内存错误的位置,修改掉错误的代码即可,..._海思 mmz_userdev:get_mmbinfo_safe: mmb(0x00000000) not found!

无法连接虚拟机 adb devices Android ADB emulator-5554 unauthorized_安卓adb接口无法映射到虚拟机-程序员宅基地

文章浏览阅读1.3k次。缘由,业务需求需要学习App开发,搭完Cordova基础环境准备跑 Hello World,结果安卓虚拟机死活连不上,查看设备信息 adb device 提示 unauthorize尝试过网上的其他方法都不可以,最后找到一个测试可用方案删除虚拟机数据,Wipe Data启动虚拟机,重新跑项目 cordova run android连接成功如果该方法解决不了,参考:https://blog.csdn.net/u013474104/article/details/78168001..._安卓adb接口无法映射到虚拟机

mysql根据身份证号获得年龄并对年龄进行分组查询在MyBatis中的应用_mybatis select年龄段-程序员宅基地

文章浏览阅读3.1k次。需求:1.检测表只有身份证号,无年龄和性别字段,需要对检测数据进行年龄分组 2.需要根据性别的不同对数据进行比较,性别不同,比较的标准也不一样实现思路: 1.先根据身份证号运用mysql函数TIMESTAMPDIFF(YEAR,STR_TO_DATE(substr(patient_id,7,8),'%Y%m%d'),sysdate(..._mybatis select年龄段

Linux下GCC降低版本 gcc 4.4.6_/usr/local/gcc-4.4.6/bin/../libexec/gcc/x86_64-unk-程序员宅基地

文章浏览阅读5.8k次。记录如下:1.从官网下载GCC合适的版本,http://gcc.gnu.org,由于这里不支持4.5及以上,我就选了4.5以下的最高版本4.4.6,有gcc-4.4.6.tar.gz和gcc-4.4.6.tar.bz2两种包,按个人喜好选了第一种;2.解包#tar zxfv gcc-4.4.6.tar.gz3.进入解压目录,我的是~/local/gcc-4._/usr/local/gcc-4.4.6/bin/../libexec/gcc/x86_64-unknown-linux-gnu/4.4.6/cc1:

[翻译] Overleaf 中的语法检查 - Spell check language_overleaf 如何检查拼写是否为美式英语或英式英语-程序员宅基地

文章浏览阅读4.1k次。你可以将语法检查的语言更改为你的偏好(例如西班牙语):点击菜单栏,找到语法检查下拉框(spell check),然后选择你偏好的语言。_overleaf 如何检查拼写是否为美式英语或英式英语

随便推点

flume 监听端口数据案例_flume配置listen-程序员宅基地

文章浏览阅读467次。flume 监听本地端口数据_flume配置listen

单元格自适应宽度_Excel如何对表格进行自适应设置,方法很简单-程序员宅基地

文章浏览阅读5.4k次。No.1Excel操作当中,表格的高度和宽度可以进行自动调整。方法就是使用.AutoFit属性进行设置。下面用一个例子简单介绍一下,如何对单元高度和宽度格进行自动调整。No.2方法很简单,如上图所示。R.Columns.AutoFit‘自动调整列宽R.Rows.AtuoFit'自动调整行高上图为例对表格内数据随机生成,然后自动调整单元格高度和宽度。如下几行代码就可实现整个工作表的行高和宽设置。No..._excel2003表格根据内容自适应

利用gradle配置productFlavors将同一项目打包成多个应用-程序员宅基地

文章浏览阅读579次。利用gradle配置productFlavors,将同一个项目,只是有部分功能有区别,比如支付。大陆版用微信,支付宝。,打包成不同的应用

urllib中的urlretrieve提示错误:No such file or directory_urllib.error.urlerror: <urlopen error [errno 2] no-程序员宅基地

文章浏览阅读5.4k次。urllib中的urlretrieve部分的代码:urllib.urlretrieve(eachpic,'tring/pic/'+'1'+str(i)+str(u)+'.jpg')一直提示错误:IOError:[Errno 2] No such file or directory:’tring/pic/100.jpg’解决方案: 修改了文件存储目录写法,将urllib.urlretrieve(ea_urllib.error.urlerror:

智能网联汽车——安全问题_智能网联汽车 信息安全-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏30次。乘车出行,安全是基本保障。本篇推送主要介绍汽车在安全方面的分类以及具体的策略。一、汽车被动安全汽车发生碰撞事故,保护驾驶员的安全。主要包括安全气囊和安全带。二、汽车主动安全汽车行驶是靠轮胎和地面产生的摩擦力来进行驱动和制动。一旦车辆加速度非常大,汽车的惯性比地面提供的摩擦力大时就会发生滑移,然后就会失稳发生事故。主动安全就是保证汽车在失稳的情况下汽车可以稳定行驶。主要包括ABS(制动..._智能网联汽车 信息安全

机器学习面试真题1000题详细讲解第八集_数据科学家可能会同时使用多个算法(模型)进行预测, 并且最后把这些算法的结果集成-程序员宅基地

文章浏览阅读6.1k次。机器学习面试真题1000题详细讲解第八集231 SVM模型中, 真正影响决策边界的是支持向量以下哪些算法, 可以用神经网络去构造: 1. KNN2. 线性回归3. 对数几率回归A. 1和 2B. 2 和 3C. 1, 2 和 3D. 以上都不是答案: B在这里给大家推荐一个python系统学习q群:250933691有免费开发工具以及初学资料,(数据分析,爬..._数据科学家可能会同时使用多个算法(模型)进行预测, 并且最后把这些算法的结果集成

推荐文章

热门文章

相关标签