Servlet开发-tomcat如何解析json格式的数据

news2024/10/7 4:37:24

前言

        在应用层协议中,json格式是程序猿经常用来组织数据的格式,在http数据报的body中也经常会携带json格式的数据,所以 tomcat 部署的 webapp 能够解析 json 格式的数据是很有必要的

引入依赖

        tomcat 本身并不支持解析 json 格式的数据,所以我们就需要引入第三方库(引入依赖)Jackson

        1.在中心仓库中搜索Jackson,选择Jackson Databind

        2.选择任意一个版本,复制Maven中的代码

        3.把这段代码复制到pom.xml文件(Maven模式下最重要的配置文件)的dependencies标签中

        第三方库Jackson引入完成,我们就可以编写代码了

代码及其注意事项

        代码

//解析json格式的数据
    //假设接收到的http请求的body中写入的是json格式的数据
    //数据内容是:
    //{
    //  "username":“OMG”
    //  "password":“123”
    //}

class User{
    public String username;
    public String password;
}

@WebServlet("/json")

public class read_json extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      
        ObjectMapper objectMapper=new ObjectMapper();
     
        User user=objectMapper.readValue(req.getInputStream(),User.class);
        System.out.println("username:"+user.username);
        System.out.println("password:"+user.password);

        //通过类对象来获得json格式的数据
        String user_json=objectMapper.writeValueAsString(user);
        System.out.println(user_json);

        resp.getWriter().write("ok");
    }
}

        注意事项

        1.解析json格式的数据Jackson提供了一个类两个方法,类是ObjectMapper,方法是readValue和writeValueAsString

        2.readValue方法中可以传入很多类型的参数,解析json格式的数据用的参数是(InputStream,JavaType)

        InputStream是输入流,表示从什么地方获取json格式的数据(传入的就是请求对象req的输入流)JavaType表示Java中的一个类对象,通过这个类对象来明确类中有哪些属性

        3.怎么明确类中有哪些属性❓为什么要明确类中有哪些属性❓我们先来理解Jackson的工作原理:

        先将json格式的数据进行解析,按照键值对的方式存放到map中,然后利用参数中的类对象,通过反射的方式把类里包含public的属性都获取到,此时就可以利用反射获取到的这些“属性名字”去和json解析出来的键值对进行匹配,如果匹配到了,就把value设为属性的值

        简单来说就是传入的类对象的属性名称与类型要和json格式key的名称与类型相同,这样才能解析json格式的数据后给类对象中的属性赋值,从而得到json格式的数据

结果展示

        通过postman构造并发送一个post类型的http请求给创建好的webapp,postman中得到了ok,表示成功获得服务器返回的http响应

        idea的控制台也正确的打印出了json中的内容

        

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

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

相关文章

【Qt】16进制转换格式字符串及二进制

【Qt】16进制转换格式字符串及二进制 16进制转换成字符串16进制转换成格式字符串16进制转换成字符串并每两位加空格16进制转换成二进制 16进制转换成字符串 可调用QString类的静态方法number(),此方法为重载,有以下重载 // 第一个参数为输入值,第二个为…

如何接入电商数据平台API接口实现数据采集请求获取商品详情价格、优惠券、优惠活动、品牌、店铺、主图等数据示例

app商品详情原数据API接口可以获取拼多多平台上某个商品的详细信息,包括商品标题、价格、图片、规格、参数、店铺信息等。 通过这个接口获取到的商品详情数据可以结合其他数据进行深度挖掘,例如可以将商品数据对比分析,找出同类商品中的优劣…

Unity中Shader中UI材质去色功能实现

文章目录 前言一、实现思路1、在属性面板暴露一个 开关 来控制去色变体2、声明一个变体3、在片元着色器实现去色 二、实现1、定义开关2、声明变体3、在片元着色器中,使用宏判断是否去色法1、只输出结果的单通道值,一般来说结果不太理想,比较节…

TikTok扮演丘比特为员工提供婚介服务

据透露,TikTok 有一项内部配对服务,供员工将同事介绍给朋友和家人。 该频道名为 Meet Cute,是全球数千名 TikTok 员工使用的工作场所工具,用于文件托管和视频会议。它还可以帮助人们从同事中找到潜在的浪漫伴侣。 在该平台上&…

html页面仿word文档样式(vue页面也适用)

目录 文章title&#xff1a; 标题&#xff1a; 正文&#xff1a; 完整代码&#xff1a; 页面效果&#xff1a; 文章title&#xff1a; <div><h3 style"display: flex;justify-content: center; align-items: center; color: #000;">实验室招新报名公…

CSDN程序设计精品课程——Java程序设计(Java语言概述·Java语言基础·Java基本数据类型)

Java程序设计课程分配&#xff1a; Java语言概述Java语言基础Java基本数据类型控制结构Java核心类类的定义与使用对象的初始化包继承抽象类与接口异常的处理自定义异常字节流字符流标准输入/输出流基本类型的包装类型泛型和集合类 目录 Java语言概述 Java语言的特点 Java开发…

初学Java小案例(一)

目录 案例一&#xff1a;买飞机票 案例二&#xff1a;开发验证码 案例三&#xff1a;评委打分 案例四&#xff1a;数字加密 案例五&#xff1a;数组拷贝 案例六&#xff1a;抢红包 案例七&#xff1a;找素数的三种方法 案例八&#xff1a;打印乘法口诀表 案例九&#x…

el-image 和 el-table冲突层级冲突问题

其中原理&#xff0c;很多博客已经所过了&#xff0c;table组件中使用图片&#xff0c;会出现层级过低问题&#xff0c; 网上大部分解决方式是 使用穿透 // 单元格样式 ::v-deep(.el-table__cell) {position: static !important; }我在此不推荐这种解决方式&#xff0c;原因&a…

如何编写测试用例,一篇搞定

前言 说到测试用例&#xff0c;但凡是软件测试从业人员&#xff0c;都不会陌生。但对于测试新手来说&#xff0c;测试用例仍旧有遗漏&#xff0c;或者写不好的时候。那么&#xff0c;究竟应该如何写好测试用例呢&#xff1f;今天就来针对性的聊聊这个话题。 在分析如何写测试…

初识Java 10-3 集合

目录 Collection和Iterator的对比 for-in和迭代器 总结图 本笔记参考自&#xff1a; 《On Java 中文版》 Collection和Iterator的对比 Collection是所有序列集合的共同根接口。因此&#xff0c;可以认为它是一个为表示其他接口之间的共性而出现的“附属接口”。 java.util.Ab…

Linux下ThinkPHP5实现定时器任务 - 结合crontab

实例一&#xff1a; 1.在/application/command创建要配置的PHP类文件&#xff0c;需要继承Command类&#xff0c;并重写configure和execute两个方法&#xff0c;例如: <?php namespace app\command; use think\console\Command; use think\console\Input; use think\cons…

紫光展锐6nm国产5G处理器T820_国产手机芯片5G方案

紫光展锐T820是一款采用先进6nm EUV工艺的芯片&#xff0c;采用134三丛集八核心CPU架构&#xff0c;由1个主频为 2.7GHz 的 Arm Cortex-A76 大核和 3个主频为2.3GHz 的Arm Cortex-A76大核以及4个主频为2.1GHz的 Arm Cortex-A55组成 &#xff0c;支持高达3MB 三级缓存&#xff0…

【解决方案】edge浏览器批量添加到集锦功能消失的解决方案

edge的集锦功能很好用&#xff0c;右键标签页会出现如下选项&#xff1a; 但在某次edge更新后&#xff0c;右键标签页不再出现该选项&#xff1a; 这里可以参考为什么我的Edge浏览器右键标签页没有“将所有标签页添加到集锦”功能&#xff1f; - Microsoft Community 一文提出…

1794_ChibiOS网络书籍的介绍阅读

全部学习汇总&#xff1a; GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 看到这个介绍我觉得这个OS的作者也是一个超级hack&#xff0c;而且非常有工匠精神。为什么要推出一个全新的RTOS呢&#xff0c;其实主要的原因就是觉…

【C语言】插入排序详解

文章目录 一、直接插入排序1、插入排序思想2、程序代码3、测试 二、希尔排序1、什么是希尔排序2、希尔排序图解3、程序代码4、测试 一、直接插入排序 1、插入排序思想 直接插入排序就是将待排序的记录按照它的关键码值插入到一个已经排好序的有序序列中&#xff0c;直到所有的…

【亲测有效】解决npm报错:RequestError: unable to verify the first certificate

问题简述 帖主从nodejs官网下载安装nodejs后&#xff0c;发现使用以下命令安装electron会报错 npm install electron报错信息如下&#xff1a; npm ERR! RequestError: unable to verify the first certificate解决方案 网上列举的方案&#xff0c;无外乎&#xff1a; 设置…

一篇文章让你学会什么是哈希

一篇文章让你学会什么是哈希 哈希概念哈希冲突哈希函数1. 直接定址法2. 除留余数法3. 平方取中法4. 折叠法5. 随机数法6. 数学分析法 哈希冲突解决1. 闭散列1.1 线性探测1.2 二次探测 2. 开散列 开散列和闭散列对比 哈希概念 哈希在C中有广泛的应用&#xff0c;它是一种用于快…

Compose LazyColumn 对比 RecyclerView ,谁的性能更好?

LazyColumn 是 compose 中用来实现类似 RecyclerView 效果的控件 &#xff0c;但是大家都说LazyColumn性能比RecyclerView差太多&#xff0c;毕竟 RecyclerView google优化了十多年了&#xff0c;比RecyclerView差一点也正常&#xff0c;今天我们就用实际数据来对比LazyColumn和…

全流程HEC-RAS 1D/2D水动力与水环境模拟技术案例实践及拓展应用丨从小白到精通,十九项案例实践

目录 专题一 水动力模型基础 专题二 恒定流模型(1D/2D) 专题三 一维非恒定流 专题四 二维非恒定流模型&#xff08;一&#xff09; 专题五 二维非恒定流模型&#xff08;二&#xff09; 专题六 HEC-RAS的水质模型 专题七 高级主题 水动力与水环境模型的数值模拟是实现水…

如何安全传输存储用户密码?(程序员必备)

前言 我们开发网站或者APP的时候&#xff0c;首先要解决的问题&#xff0c;就是「如何安全传输和存储用户的密码」。一些大公司的用户数据库泄露事件也时有发生&#xff0c;带来非常大的负面影响。因此&#xff0c;如何安全传输存储用户密码&#xff0c;是每位程序员必备的基础…