返回顶部
首页 > 资讯 > 后端开发 > Python >聊聊@RequestBody和Json之间的关系
  • 570
分享到

聊聊@RequestBody和Json之间的关系

2024-04-02 19:04:59 570人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

在使用springMVC的时候,后台@RequestBody接受的是一个JSON格式的字符串,一定是一个字符串。 我们可以通过@RequestBody Map @Requ

在使用springMVC的时候,后台@RequestBody接受的是一个JSON格式的字符串,一定是一个字符串。

我们可以通过@RequestBody Map


    @RequestMapping(value="/queryAccountList.do",produces="application/json;charset=UTF-8")
    @ResponseBody
    public HashMap<String, Object> queryAccountList(@RequestBody Map<String, Object> paramsMap){
        System.out.println("paramsMap="+paramsMap);
        String  channel= (String) paramsMap.get("channel");
        String function_code=(String) paramsMap.get("function_code");
        Map<String, Object> reqParam=(Map<String, Object>)paramsMap.get("data");

前端调用我们的接口时,传入json字符串,就转为了map对象。这里主要是@RequestBody的底层实现,我们不讨论。

json对象和json字符串的区别:


var person={“name”:”zhangsan”,”sex”:”男”,”age”:”24”}//json对象
var person='{“name”:”zhangsan”,”sex”:”男”,”age”:”24”}';//json字符串

json对象转为json字符串,调用stringify方法:


var person={"name":"zhangsan","sex":"男","age":"24"};//json对象
var personString = JSON.stringify(person);
alert(personString);

springmvc接受json字符串类型

在SpringMVC中基于REST开发时,前端传入后台的应该是一个json格式的字符串,而不是一个json对象

GET、POST方式提时, 根据request header Content-Type的值来判断:

application/x-www-fORM-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);

multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);

其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理)。

@RequestBody 处理类型 和 对象 和 json相互转换

1 @RequestBody 处理类型

项目中经常看到controller 中有 @RequestBody 字样,他到底有什么作用?

一般使用表单提交数据时不需要使用@RequestBody 即可自动封装数据到对应的 Bean 中。@RequestBody 用来处理Content-Type: application/json, application/xml等

它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。

说明:使用 @RequestBody 解析数据需要添加 jackson 或 fastjson 依赖包。

Maven 引入 fastjson 包


<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.51</version>
</dependency>

2 对象 和 json 相互转换

在项目中经常会遇到对象和 json 之间相互转换,公共类 和 json 对象转换, 静态内部类 和 json 对象转换

2.1 没有内部类时 Student 类


@Data
public class Student {
    private String id;
    private String name;
    private int age;
    private String sex;
@Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }
}

json 和 对象 相互转换


public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        Student student = new Student();
        student.setName("Good");
        String s = mapper.writeValueAsString(student);
        System.out.println(s);
        Student hd2 = mapper.readValue(s, Student.class);
        System.out.println(hd2);
    }

2.2 有静态内部类时 Student 类


@Data
public class Student {
    private String id;
    private String name;
    private int age;
    private String sex;
    private HomeData homeData;
    private BigDecimal salary;
    private String[] tel;
    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }
    @Data
    public static class HomeData{
        private Address address;
        @Override
        public String toString() {
            return ToStringBuilder.reflectionToString(this);
        }
        @Data
        public static class Address {
            private String country;
            private String city;
            @Override
            public String toString() {
                return ToStringBuilder.reflectionToString(this);
            }
        }
    }
}

json 和 对象 之间相互转换


public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        Student student = new Student();
        Student.HomeData homeData = new Student.HomeData();
        Student.HomeData.Address address = new Student.HomeData.Address();
        address.setCountry("中国");
        address.setCity("上海");
        homeData.setAddress(address);
        student.setHomeData(homeData);
        String s = mapper.writeValueAsString(address);
        System.out.println(s);
        Student.HomeData.Address hd2 = mapper.readValue(s, Student.HomeData.Address.class);
        System.out.println(hd2);
    }

说明:主要方法有 mapper.writeValueAsString 和 mapper.readValue

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 聊聊@RequestBody和Json之间的关系

本文链接: https://lsjlt.com/news/127750.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 聊聊@RequestBody和Json之间的关系
    在使用springmvc的时候,后台@RequestBody接受的是一个json格式的字符串,一定是一个字符串。 我们可以通过@RequestBody Map @Requ...
    99+
    2024-04-02
  • 聊聊PyTorch中eval和no_grad的关系
    首先这两者有着本质上区别 model.eval()是用来告知model内的各个layer采取eval模式工作。这个操作主要是应对诸如dropout和batchnorm这些在训练模式下...
    99+
    2024-04-02
  • 聊聊Git和GitHub有什么关系?
    在软件开发领域,Git与GitHub是两个重要的概念。虽然它们从根本上具有不同的含义,但它们之间有许多相关性。首先,Git是一种分布式版本控制系统,可以在本地计算机上管理和追踪代码的版本。Git通过记录每个文件的更改历史和元数据,使开发者可...
    99+
    2023-10-22
  • 聊聊PHP和MySQL注入之间的安全问题
    最近,很多网站因为被黑客攻击而暴露了敏感信息,其中一种攻击方式就是通过MySQL注入来实现。PHP是一种流行的服务器端编程语言,通常与MySQL一起使用。因此,PHP和MySQL注入之间的安全问题需要得到重视。什么是MySQL注入?MySQ...
    99+
    2023-05-14
  • 聊聊有关golang ()和.() 的转换
    Golang中的()和.()转换在Golang中,()和.()是两种非常常见的类型转换。在本篇文章中,我们将会介绍这两种类型转换的使用场景、转换规则以及相关的示例代码。()转换在Golang中,()转换是将一个非接口类型转换为一个接口类型的...
    99+
    2023-05-14
  • 聊聊Golang中的转码系统及其相关技术
    近年来,随着人民生活水平的不断提高和互联网技术的不断发展,多语言环境下的编程和转码成为一种趋势。Go语言作为一种开源的、跨平台的编程语言,受到了越来越多的开发者的青睐。在Golang中,转码系统的实现是一个极具挑战性的任务。本文主要介绍Go...
    99+
    2023-05-14
  • 聊聊Go语言中整数类型之间的转换操作
    Go语言中有多种整数类型,包括int、int8、int16、int32、int64、uint、uint8、uint16、uint32和uint64等。这些类型占用的字节数不同,在运算和存储时有各自的特点和限制。当我们需要对不同类型的整数进行...
    99+
    2023-05-14
  • 聊聊关于python的requirements文件和虚拟环境的创建
    目录 1. requirements 的创建 1.1 创建整个环境的requirements文件 1.2 创建单个项目的 requirements 文件 2. 利用conda创建新环境 3.  安装requirements文件 4. con...
    99+
    2023-09-03
    python 开发语言 pycharm
  • Apache、PHP和Mysql之间的关系
    Apache、PHP和MySQL是常见的Web开发技术栈中的重要组件。Apache是一款开源的Web服务器软件,它负责接收来自客户端...
    99+
    2023-08-31
    PHP
  • Hive 和 HDFS、MySQL 之间的关系
    文章目录 HiveHDFSMySQL三者的关系 Hive、MySQL 和 HDFS 是三个不同的数据存储和处理系统,它们在大数据生态系统中扮演不同的角色,但可以协同工作以支持数据...
    99+
    2023-10-09
    hive hdfs mysql 大数据 数据仓库
  • Java和JavaScript之间有关系吗
    这篇文章主要介绍“Java和JavaScript之间有关系吗”,在日常操作中,相信很多人在Java和JavaScript之间有关系吗问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java和JavaScript...
    99+
    2023-06-14
  • JavaScript和ECMAScript之间的关系是什么
    这篇“JavaScript和ECMAScript之间的关系是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面...
    99+
    2024-04-02
  • Flex和Flash之间的关系是什么
    这篇文章给大家分享的是有关Flex和Flash之间的关系是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Flex Flash关系分析1、Flex应用程序的生命周期Flex应用就其根本上讲就是Flash应用,只...
    99+
    2023-06-17
  • ASP和Windows之间的关系是什么?
    ASP(Active Server Pages)是一种基于服务器端的脚本语言,用于开发动态网站和Web应用程序。Windows是一种操作系统,被广泛用于服务器和个人电脑上。那么ASP和Windows之间的关系是什么呢?本文将深入探讨这个问题...
    99+
    2023-08-16
    windows linux leetcode
  • Html、CSS和JavaScript三者之间的关系
    这篇“Html、CSS和JavaScript三者之间的关系”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“Html、CSS和JavaScript三者之间的关系”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处...
    99+
    2023-06-06
  • HBase和ApacheHadoop之间的关系是什么
    在HBase中,ZooKeeper扮演着重要的角色作为协调服务。具体来说,ZooKeeper在HBase中主要用于以下几个方面: ...
    99+
    2024-03-07
    HBase
  • python 类之间的关系
    类与类之间的关系     在我们的世界中事物和事物之间总会有一些联系.     在面向对象中. 类和类之间也可以产生相关的关系     1. 依赖关系         执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的关系是最...
    99+
    2023-01-30
    关系 python
  • jsp和javascript之间有什么关系
    本篇内容主要讲解“jsp和javascript之间有什么关系”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“jsp和javascript之间有什么关系”吧! ...
    99+
    2024-04-02
  • laravel和php之间有什么关系
    这篇文章主要为大家展示了“laravel和php之间有什么关系”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“laravel和php之间有什么关系”这篇文章吧。php是一种脚本语言,而larave...
    99+
    2023-06-29
  • hadoop和hdfs之间有什么关系
    Hadoop是一个开源的分布式计算框架,用于处理大规模数据的存储和处理。而HDFS(Hadoop Distributed File ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作