iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 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://www.lsjlt.com/news/127750.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 聊聊@RequestBody和Json之间的关系
    在使用springmvc的时候,后台@RequestBody接受的是一个json格式的字符串,一定是一个字符串。 我们可以通过@RequestBody Map @Requ...
    99+
    2022-11-12
  • 聊聊PyTorch中eval和no_grad的关系
    首先这两者有着本质上区别 model.eval()是用来告知model内的各个layer采取eval模式工作。这个操作主要是应对诸如dropout和batchnorm这些在训练模式下...
    99+
    2022-11-12
  • 聊聊PHP和MySQL注入之间的安全问题
    最近,很多网站因为被黑客攻击而暴露了敏感信息,其中一种攻击方式就是通过MySQL注入来实现。PHP是一种流行的服务器端编程语言,通常与MySQL一起使用。因此,PHP和MySQL注入之间的安全问题需要得到重视。什么是MySQL注入?MySQ...
    99+
    2023-05-14
  • Hive 和 HDFS、MySQL 之间的关系
    文章目录 HiveHDFSMySQL三者的关系 Hive、MySQL 和 HDFS 是三个不同的数据存储和处理系统,它们在大数据生态系统中扮演不同的角色,但可以协同工作以支持数据...
    99+
    2023-10-09
    hive hdfs mysql 大数据 数据仓库
  • Apache、PHP和Mysql之间的关系
    Apache、PHP和MySQL是常见的Web开发技术栈中的重要组件。Apache是一款开源的Web服务器软件,它负责接收来自客户端...
    99+
    2023-08-31
    PHP
  • JavaScript和ECMAScript之间的关系是什么
    这篇“JavaScript和ECMAScript之间的关系是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面...
    99+
    2022-10-19
  • Flex和Flash之间的关系是什么
    这篇文章给大家分享的是有关Flex和Flash之间的关系是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Flex Flash关系分析1、Flex应用程序的生命周期Flex应用就其根本上讲就是Flash应用,只...
    99+
    2023-06-17
  • Html、CSS和JavaScript三者之间的关系
    这篇“Html、CSS和JavaScript三者之间的关系”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“Html、CSS和JavaScript三者之间的关系”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处...
    99+
    2023-06-06
  • ASP和Windows之间的关系是什么?
    ASP(Active Server Pages)是一种基于服务器端的脚本语言,用于开发动态网站和Web应用程序。Windows是一种操作系统,被广泛用于服务器和个人电脑上。那么ASP和Windows之间的关系是什么呢?本文将深入探讨这个问题...
    99+
    2023-08-16
    windows linux leetcode
  • Java线程和Objec之间的关系是什么
    Java线程和Objec之间的关系是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java线程在不断的发展,发展的过程中我们需要不断的学习相关代码的知识。下面我们就详细的看...
    99+
    2023-06-17
  • 探索Java和Unix之间的框架索引关系。
    探索Java和Unix之间的框架索引关系 在计算机编程领域,Java和Unix都是非常重要的技术。Java是一种广泛使用的编程语言,而Unix是一种广泛使用的操作系统。尽管它们在不同的领域中使用,但它们之间有许多相似之处。本文将探索Java...
    99+
    2023-06-16
    unix 框架 索引
  • Python web框架和web服务器之间的关系
    本篇内容介绍了“Python web框架和web服务器之间的关系”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们都知道 Python 作为...
    99+
    2023-06-16
  • Python和人工智能之间存在怎样的关系?
      其实提及到人工智能我们就会想到Python语言,尤其是对于初学者来说都认为人工智能和Python属于等号关系,其实Python是一种计算机程序语言,是一种动态、面向对象的脚本语言,起初用于编写自动化脚本,随着版本更新和功能增加,也可以从...
    99+
    2023-06-02
  • 算法和 Linux:你知道它们之间的关系吗?
    算法和Linux这两个词汇在计算机科学中都是非常重要的概念。算法是计算机科学中的核心,它是一种解决问题的方法和步骤。Linux则是一个开源的操作系统,它是由Linus Torvalds在1991年创建的,目前已经成为了世界上最流行的操作系...
    99+
    2023-09-20
    git 编程算法 linux
  • C语言数组和指针,内存之间的关系
    首先论证一维数组和一级指针之前的关系,我们常常使用一级指针指针的方式访问一维数组,只有对内存的理解到位才能理解它们直接的关系。 1.数组名是数组的首地址2.对数组名取地址得到的还是数...
    99+
    2022-11-13
  • 如何平衡关键词优化和内容质量之间的关系
    平衡关键词优化与内容质量之间的关系主要涉及以下几个方面:1、关键词研究:选择与内容主题紧密相关的关键词;2、关键词分布:确保关键词在内容中自然分布,避免过度优化;3、内容质量:注重信息含量、深度和可读性,确保内容对用户有价值;4、用户体验:...
    99+
    2023-10-29
    关键词 关系 质量
  • ASP重定向和Apache文件之间的关系是什么?
    ASP是一种常用的服务器端脚本语言,它可以用于创建动态网页和Web应用程序。而Apache是一种常用的Web服务器软件,它可以用于托管Web应用程序和文件。 在ASP中,重定向是一种将用户从一个网页重定向到另一个网页的技术。这种技术可以用...
    99+
    2023-10-09
    重定向 apache 文件
  • ASP路径和Laravel之间的关系:如何成功打包?
    ASP和Laravel是两个不同的Web开发框架,他们分别在不同的时期产生和发展,但是在某些场景下,ASP和Laravel也可以同时存在。如何在这两个框架之间切换,如何打包,是一个需要我们去深入了解的问题。 一、ASP和Laravel的区别...
    99+
    2023-07-29
    path 打包 laravel
  • 你真的了解Python、Spring和NumPy接口之间的关系吗?
    Python、Spring和NumPy接口之间的关系 Python、Spring和NumPy是当前最流行的编程语言和框架之一。Python是一种高级编程语言,拥有简单易学、功能强大、灵活性高的特点,被广泛应用于Web开发、数据分析、人工智能...
    99+
    2023-10-20
    spring numy 接口
  • AndroidStudio AGP插件和Gradle之间的版本对应关系(官方)
    一,Android Gradle Plugins 版本和Gradle 版本的对应关系 官网资料 Android Gradle 插件版本说明  |  Android 开发者  |  Android Developers Google官方的文档...
    99+
    2023-10-27
    android android studio gradle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作