目录
① 介绍 jackson 提供操作 json 数据的类和方法
本文使用maven项目,并使用 idea 中的 smart Tomcat 插件,smart Tomcat 配置如下:
没接触servlet的同学可以参考:Servlet初识—编写hello world+使用smart Tomcat插件部署
Servlet 没有内置 json解析,为了方便我们可以引入第三方json库:jackson
maven 官方地址:https://mvnrepository.com/
在maven官网搜索 jackson,点击第一个搜索结果 Jackson Databind
进入之后随便挑一个版本,这里我选的是 2.13.4.1
复制 Maven 内的代码
- <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>2.13.4.1</version>
- </dependency>
添加到 pom.xml 的 dependencies 标签中
注意:
- 如果没有 dependencies 标签,那就需要自己手写一个
- 如果代码报红,可以点击右上的刷新按钮
jackson 提供了一个核心类共我们读取和操作json数据,该类为 ObjectMapper
对于该类,我们主要掌握两个方法即可,如下
1. readValue 方法
这里要求,json 键值对中 键 的名字务必和 类 的属性名一一对应
2. writeValueAsString 方法
此处假设请求的 body 格式为 { Id: 10, name: "张三" }
然后,根据属性创建一个 Person 类(目的:方便我们接收数据)
- class Person{
- public int Id;
- public String Name;
- }
注意:
- 这个类里的属性务必使 public 或者带有 public 的 getter / setter 方法,否则 jackson 无法访问这个对象的属性
- 这个类务必要有无参版本的构造方法!!!
编写一个类 JsonServlet 并继承 HttpServlet,同时实现 doGet 方法并在该方法中实现接收json数据等操作
@WebServlet("/json") :设置该类的 Servlet Path为 /json
总代码如下
- class Person{
- //1.这个类里的属性务必使 public 或者带有 public 的 getter / setter
- // 否则 jackson 无法访问这个对象的属性
- //2.这个类务必要有无参版本的构造方法!!!
- public int Id;
- public String Name;
- }
-
- @WebServlet("/json")
- public class JsonServlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- // 此处假设请求的 body 格式为
- // { Id: 10, name: "张三" }
- ObjectMapper objectMapper = new ObjectMapper();
- //readValue 第一个参数可以是字符串,也可以是输入流
- //第二个参数,是一个类对象,也就是要解析出来的结果的对象的类
- Person p = objectMapper.readValue(req.getInputStream(),Person.class);
- System.out.println(p.Id);
- System.out.println(p.Name);
-
- //设置字符集
- resp.setContentType("text/html; charset=utf8");
- resp.getWriter().write(p.Id +", "+ p.Name);
- }
- }
首先,运行该代码,然后打开 postman,点击 +
在 GET 后输入地址:http://127.0.0.1:8080/servlet/json
返回选择下面 Body -> raw -> JSON,并在下发输入要发送的 json 数据
注意:在 postman 中写 json 格式的时候,务必要保证这里的key 是带引号的!!!
点击 Send,就能在下发看见发送结果了
同时,在Idea 中也有打印
到此,json 数据就发送并接收成功!!
复杂 json 本质不变,其实就是一个嵌套结构
- class Score{
- public ArrayList
scores; - }
-
- class Person{
- public int Id;
- public String Name;
- public Score score;
- }
-
- @WebServlet("/json")
- public class JsonServlet extends HttpServlet {
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- ObjectMapper objectMapper = new ObjectMapper();
- Person s = objectMapper.readValue(req.getInputStream(),Person.class);
-
- resp.setContentType("text/html; charset = utf8");
- resp.getWriter().write(s.Id +", "+s.Name+", "+s.score.scores);
-
- }
- }