编写Servlet代码获取页面body中json数据

目录

1、在 maven 项目中引入 jackson

2、编写代码

 ① 介绍 jackson 提供操作 json 数据的类和方法

 ② 确定 json 数据格式,并写出对应的类

 ③ 编写servlet代码

3、使用 postman 发送数据观察结果

4、拓展 readValue 方法返回构造对象的过程


 本文使用maven项目,并使用 idea 中的 smart Tomcat 插件,smart Tomcat 配置如下:

编写Servlet代码获取页面body中json数据_第1张图片

 没接触servlet的同学可以参考:用Servlet编写hello world+使用smart Tomcat插件部署

1、在 maven 项目中引入 jackson

Servlet 没有内置 json解析,为了方便我们可以引入第三方json库:jackson

maven 官方地址:https://mvnrepository.com/

在maven官网搜索 jackson,点击第一个搜索结果 Jackson Databind

编写Servlet代码获取页面body中json数据_第2张图片进入之后随便挑一个版本,这里我选的是 2.13.4.1 编写Servlet代码获取页面body中json数据_第3张图片

 复制 Maven 内的代码编写Servlet代码获取页面body中json数据_第4张图片



    com.fasterxml.jackson.core
    jackson-databind
    2.13.4.1

 添加到 pom.xml 的 dependencies 标签中

编写Servlet代码获取页面body中json数据_第5张图片

 注意:

  1. 如果没有 dependencies 标签,那就需要自己手写一个
  2. 如果代码报红,可以点击右上的刷新按钮

    编写Servlet代码获取页面body中json数据_第6张图片

​​

2、编写代码

 ① 介绍 jackson 提供操作 json 数据的类和方法

 jackson  提供了一个核心类共我们读取和操作json数据,该类为 ObjectMapper

对于该类,我们主要掌握两个方法即可,如下

 1. readValue 方法

  • 作用:把 json 格式的数据转成 java 对象 
  • 传参
    • 第一个参数:可以是字符串,也可以是字符流
    • 第二个参数:是一个类对象(就是要解析出来的结果的对象的类)   

 2. writeValueAsString 方法

  • 作用:把 java 对象转成 json 格式的字符串

 ② 确定 json 数据格式,并写出对应的类

此处假设请求的 body 格式为  { Id: 10, name: "张三" }

然后,根据属性创建一个 Person 类(目的:方便我们接收数据)

class Person{
    public int Id;
    public String Name;
}

注意:

  1. 这个类里的属性务必使 public 或者带有 public 的 getter / setter 方法,否则 jackson 无法访问这个对象的属性
  2. 这个类务必要有无参版本的构造方法!!!            

 ③ 编写servlet代码

编写一个类 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();
        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);
    }
}

3、使用 postman 发送数据观察结果

首先,运行该代码,然后打开 postman,点击 +

编写Servlet代码获取页面body中json数据_第7张图片

 在 GET 后输入地址:http://127.0.0.1:8080/servlet/json

 返回选择下面 Body -> raw -> JSON,并在下发输入要发送的 json 数据编写Servlet代码获取页面body中json数据_第8张图片

 注意:在 postman 中写 json 格式的时候,务必要保证这里的key 是带引号的!!!

点击 Send,就能在下发看见发送结果了

编写Servlet代码获取页面body中json数据_第9张图片 

 同时,在Idea 中也有打印

编写Servlet代码获取页面body中json数据_第10张图片

 到此,json 数据就发送并接收成功!!

4、拓展 readValue 方法返回构造对象的过程

1. 读取输入流,获取到要解析的字符串。

2. 把字符串按照 json 格式解析,得到一组键值对(Map)。

3. 根据类对象,创建一个实例。

4. 遍历类对象中的属性的名字,拿着名字去上述 Map 中查询,查到的 value 赋值到对应的对象的属性中。

5. 返回这个构造完成的对象。

你可能感兴趣的:(Java,EE,json,java,javaee,servlet)