【SpringMVC】使用SpringMVC处理JSON格式的数据

news2025/1/20 17:02:47

目录
一、前言
二、@ResponseBody
三、@RequestBody
四、HttpMessageConverter


相关文章(可以关注我的SpringMVC专栏)

SpingMVC专栏SpingMVC专栏

一、前言

 我们在使用Servlet处理前端请求,使用Json格式的数据,通常引入外部提供的一些jar包来将我们的其他格式的数据转换成Json格式,最终返回给前端。但在SpringMVC中如何返回Json格式的数据,这将是这节我们需要探讨的问题❓

二、@ResponseBody

前端

<%--
  Created by IntelliJ IDEA.
  User: huawei
  Date: 2022/11/29
  Time: 14:36
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>json提交</title>
    <script type="text/javascript" src="script/jquery.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#getJson").click(
                function () {
                    $.post(
                        "/springmvc/json/dog",
                        {
                            "time": new Date
                        },
                        function (data) {
                            console.log(data);
                            console.log(data.name);
                            console.log(data.address);
                        },
                        "json"
                    );
                    // 不提交a标签的请求
                    return false;
                }
            )
        })
    </script>
</head>
<body>
<h1>请求json数据</h1>
<a href="<%=request.getContextPath()%>/json/dog" id="getJson">获取数据</a>
</br>
</body>
</html>

后端

package com.jl.web.json.entity;

/**
 * ClassName: Dog
 * Package: com.jl.web.json.entity
 * Description:
 *
 * @Author: Long
 * @Create: 2022/11/29 - 14:39
 * @Version: v1.0
 */
public class Dog {
    private String name;
    private String address;

    public Dog(String name, String address) {
        this.name = name;
        this.address = address;
    }

    public Dog() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}
package com.jl.web.json;

import com.jl.web.json.entity.Dog;
import com.jl.web.json.entity.User;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * ClassName: DogHandler
 * Package: com.jl.web.json
 * Description:
 *
 * @Author: Long
 * @Create: 2022/11/29 - 14:40
 * @Version: v1.0
 */
@Controller
public class JsonHandler {
    @RequestMapping(value = "/json/dog")
    @ResponseBody
    public Dog getJson(){
        Dog dog = new Dog("大黄狗","上海");
        return dog;
    }
}
  1. @ResponseBody 表示,返回的数据是json格式。
  2. springMVC底层根据目标方法@ResponseBody,返回指定格式,根据http请求来进行转换。
  3. 原生的springMVC使用的是转换器HttpMessageConverter

 注意:@ResponseBody也可以加在类上,他会对所有的方法生效。
当我们的@Controller和@ResponseBody同时使用的时候,我们可以用@RestController来代替,即:@RestController = @Controller + @ResponseBody

结果
在这里插入图片描述
 当我们的后端需要返回是集合的时候,同样的使用@ResponseBody即可。

三、@RequestBody

 熟悉了我们的@ResponseBody之后,和他一样的处理Json格式数据的还有一个注解@RequestBody。从他的命名就可以猜出来:@ResponseBody是返回Json数据的,那么@RequestBody是接收Json数据的。

前端

<%--
  Created by IntelliJ IDEA.
  User: huawei
  Date: 2022/11/29
  Time: 14:36
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>json提交</title>
    <script type="text/javascript" src="script/jquery.js"></script>
    <script type="text/javascript">
        $(function () {
            // 将json封装成对象
            $("button[name='butt1']").click(
                function () {
                    var username = $("#username").val();
                    var age = $("#age").val();
                    var user = {"username": username,"age": age};
                    // 将json对象转成json字符串
                    var s = JSON.stringify(user);
                    var url = "/springmvc/save2";
                    $.ajax({
                        url: url,
                        data: s,
                        type: "POST",
                        success: function (data) {
                            console.log(data);
                        },
                        contentType: "application/json;charset=utf-8",

                    })
                }
            )
        })
    </script>
</head>
<body>
<h1>发送json数据</h1>
u:<input type="text" id="username"></br>
a:<input type="text" id="age"></br>
<button type="button" name="butt1">添加用户</button>
</body>
</html>

后端

package com.jl.web.json.entity;

/**
 * ClassName: User
 * Package: com.jl.web.json.entity
 * Description:
 *
 * @Author: Long
 * @Create: 2022/11/29 - 15:12
 * @Version: v1.0
 */
public class User {
    private String username;
    private Integer age;

    public User() {
    }

    public User(String username, Integer age) {
        this.username = username;
        this.age = age;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", age=" + age +
                '}';
    }
}
package com.jl.web.json;

import com.jl.web.json.entity.Dog;
import com.jl.web.json.entity.User;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * ClassName: DogHandler
 * Package: com.jl.web.json
 * Description:
 *
 * @Author: Long
 * @Create: 2022/11/29 - 14:40
 * @Version: v1.0
 */
@Controller
public class JsonHandler {

    /**
     * @RequestBody:可以将json字符串填充给javaBean
     *
     * @param user
     * @return
     */
    @RequestMapping(value = "/save2")
    @ResponseBody
    public User save2(@RequestBody User user){
        System.out.println("user= " + user);
        return user;
    }
}

结果

在这里插入图片描述
在这里插入图片描述

四、HttpMessageConverter底层处理

 上边我们提到过SpringMVC底层是通过HttpMessageConverter来转换Json格式数据的。下边我们来看一下它的流程图:

在这里插入图片描述

如果文章中有描述不准确或者错误的地方,还望指正。您可以留言📫或者私信我。🙏
最后希望大家多多 关注+点赞+收藏^_^,你们的鼓励是我不断前进的动力!!!
感谢感谢~~~🙏🙏🙏

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

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

相关文章

拉伯证券|利好来了,145万手封涨停!低位+低市值“无主”股揭秘

二三四五或将完毕多年“无主”局势。 周末大消息不断。蚂蚁集团1月7日在官网发布关于持续完善公司管理的公告。公告显现&#xff0c;蚂蚁集团调整首要股东投票权&#xff0c;强化与阿里巴巴集团的隔离&#xff0c;阿里巴巴开创人马云抛弃了对蚂蚁集团的实践操控权&#xff0c;蚂…

JavaScript 原型链

文章目录原型链本质 - 对象间的关联关系instanceof 和 isPrototypeOf__proto__的大致实现委托原型链 原型链就是一系列对象的链接。通常来说&#xff0c;这个链接的作用是&#xff1a;如果在对象上没有找到需要的属性或者方法引用&#xff0c;引擎就会继续在[[Prototype]]关联的…

餐饮业数字化提速,OceanBase助海底捞变身“云上捞”

在海底捞火锅智慧餐厅&#xff0c;你会看到忙得团团转的机械臂和传菜机器人&#xff0c;顾客在智能点餐系统上下单&#xff0c;机械臂和传菜机器人就会着手备菜、传菜、上菜&#xff0c;服务人员则有更多时间专心应答顾客的各种询问。这种新模式&#xff0c;也为海底捞家喻户晓…

Springboot新手开发 基本总结

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;后端专栏 &#x1f4e7;如果文章知识点有错误的地方&#xff0c;…

网络实验之HSRP协议

一、HSRP协议简介 HSRP&#xff1a;热备份路由器协议&#xff08;HSRP&#xff1a;Hot Standby Router Protocol&#xff09;&#xff0c;是cisco平台一种特有的技术&#xff0c;是cisco的私有协议。该协议中含有多台路由器&#xff0c;对应一个HSRP组。该组中只有一个路由器承…

mac自定义环境变量,mac自定义python变量,自定义通用变量(任意名字)

文章目录几个常用的命令工作原理知道原理后已经有了环境变量没有该环境变量几个常用的命令 功能命令查看当前环境变量echo $PATH编辑文件&#xff08;注&#xff1a;这里是直接编辑bash_profile&#xff09;vi ~/.bash_profile编辑i退出编辑esc回到命令&#xff08;用命令来保…

Apollo实现cron语句的热配置

GitHub项目地址 Gitee项目地址 Apollo&#xff08;阿波罗&#xff09;是携程框架部门研发的分布式配置中心&#xff0c;能够集中化管理应用不同环境、不同集群的配置&#xff0c;配置修改后能够实时推送到应用端&#xff0c;并且具备规范的权限、流程治理等特性&#xff0c;适…

stl algorithms 算法

所有泛型算法&#xff0c;除了少数例外&#xff0c;前两个参数均为一组iterator&#xff0c;用来标识欲遍历容器元素的范围&#xff0c;范围从第一个iterator所指位置开始&#xff0c;至第二个iterator所指位置&#xff08;并不包括&#xff09;结束 如 int arr[3]{1,2,3} ve…

管理客户信息并非易事

客户信息是企业的重要资产&#xff0c;是企业日积累月的价值沉淀&#xff0c;管理客户信息对于企业来说并不是一件容易的事&#xff0c;只有妥善管理客户信息&#xff0c;才能为企业创造更多价值。前言众所周知&#xff0c;客户信息是企业的重要资产&#xff0c;是企业日积累月…

rtu遥测终端机应用及安装介绍

1、设备介绍 设备集遥测终端机功能和视频录像机功能为一体&#xff0c;融合先进的3G/4G/WIFI通信技术、实现水文/水资源/环保212/TCP Modbus/MQTT等数据的采集、视频、图像存储、显示、控制、报警及传输等智能值守功能。 2、设备应用方向 本设备可广泛适用于带视频监测的水…

Jenkins 构建过程中提示 GPG 错误

错误信息如下&#xff1a;[INFO] --- maven-gpg-plugin:3.0.1:sign (sign-artifacts) rets-io --- gpg: no default secret key: No secret keygpg: signing failed: No secret key这个问题的原因应该是我们最近把我们的项目发布到中央 Maven 仓库中&#xff0c;但是发布项目到…

社区发现系列05:图的构建

想要挖掘作弊团伙首先先要构建社交网络图&#xff0c;然后用算法或者策略挖掘作弊团伙&#xff0c;那么如何构建社交网络图呢&#xff1f;下面给大家介绍一些实战经验&#xff0c;主要从电商和互金小额贷款两个业务场景来说&#xff1a; 1、电商业务 由于电商业务涉及的业务场…

《Spring揭秘》读书笔记1:IoC和AOP

1 Spring框架的由来 Spring框架的本质&#xff1a;提供各种服务&#xff0c;以帮助我们简化基于POJO的Java应用程序开发。 各种服务实现被划分到了多个相互独立却又相互依赖的模块当中&#xff1a; Core核心模块&#xff1a;IoC容器、Framework工具类。 AOP模块&#xff1a;S…

万物皆可灵活用工?灵活用工模式最契合的行业是哪些?

灵活用工VS传统用工 1&#xff09;传统用工 企业与员工签订劳动合同&#xff0c;双方出现问题纠纷适用于劳动法&#xff0c;关系固定&#xff0c;企业责任大。养着你&#xff0c;难&#xff0c;辞了你&#xff0c;更难。企业成本相对较高、负担较重&#xff08;薪资、福利&am…

Hudi的核心概念 —— 表类型(Table Types)

文章目录Copy On WriteMerge On ReadCOW 与 MOR 的对比查询类型&#xff08;Query Types&#xff09;Snapshot QueriesIncremental QueriesRead Optimized Queries不同表支持的查询类型Copy On Write 在 COW 表中&#xff0c;只有数据文件/基本文件&#xff08;.parquet&#…

【Java寒假打卡】Java基础-集合HashSet

【Java寒假打卡】Java基础-集合Set概述哈希值hashSet原理HashSet存储学生对象并遍历小结概述 底层数据结构是哈希表不能保证存储和去除的顺序完全一致没有带索引的方法&#xff0c;所以不能使用普通的for循环进行遍历 使用增强for循环或者迭代器进行遍历由于是Set集合&#xf…

广告业务系统 之 承前启后 —— “消息中心”

文章目录广告业务系统 之 承前启后 —— “消息中心”消息中心物料同步链路图模块设计之 “一分为二”模块交互图之 “强一致性设计”奇怪交互图的数据链路数据一致性问题日志中心广告业务系统 之 承前启后 —— “消息中心” 消息中心 消息中心&#xff0c;是为 投放引擎 做…

韩顺平老师的Linux基础学习笔记 (上)

Linux学习笔记 前言&#xff1a;本系列笔记的参考由 2021韩顺平 一周学会Linux 总结而成&#xff0c;希望能给学习Linux的同学一些帮助。也感谢韩老师录制的视频给我带来了非常巨大的收获&#xff01; 目录&#xff1a; 韩顺平老师的Linux基础学习笔记 (上)韩顺平老师的Linu…

交通部互通互联二维码之发卡机构公钥证书

背景 随话说的好啊&#xff0c;好比不如烂笔头&#xff0c;之前开发联调OK后&#xff0c;闲置了半年&#xff0c;结果今天再去搞公钥&#xff0c;发现完全忘记了生成规则。审核 有病 哪里来的广告&#xff1f; 特此&#xff0c;记录一下我们的过程&#xff0c;以便后面再出现…

gitee的ssh配置

#1.配置自己的gitee郵箱&#xff0c;返回直接輸入郵箱 ssh-keygen -t rsa -C "郵箱" #2.複製郵箱的ssh秘鑰 cat ~/.ssh/id_rsa.pub #在個人配置添加自己的ssh秘鑰