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


    目录

    1、在 maven 项目中引入 jackson

    2、编写代码

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

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

     ③ 编写servlet代码

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

    4、构造一个复杂的 json


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

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

    1、在 maven 项目中引入 jackson

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

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

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

    进入之后随便挑一个版本,这里我选的是 2.13.4.1 

     复制 Maven 内的代码

    1. <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
    2. <dependency>
    3. <groupId>com.fasterxml.jackson.core</groupId>
    4. <artifactId>jackson-databind</artifactId>
    5. <version>2.13.4.1</version>
    6. </dependency>

     添加到 pom.xml 的 dependencies 标签中

     注意:

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

    ​​

    2、编写代码

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

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

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

     1. readValue 方法

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

    这里要求,json 键值对中 键 的名字务必和 类 的属性名一一对应

     2. writeValueAsString 方法

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

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

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

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

    1. class Person{
    2. public int Id;
    3. public String Name;
    4. }

    注意:

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

     ③ 编写servlet代码

    编写一个类 JsonServlet 并继承 HttpServlet,同时实现 doGet 方法并在该方法中实现接收json数据等操作

    @WebServlet("/json") :设置该类的 Servlet Path为 /json

    总代码如下 

    1. class Person{
    2. //1.这个类里的属性务必使 public 或者带有 public 的 getter / setter
    3. // 否则 jackson 无法访问这个对象的属性
    4. //2.这个类务必要有无参版本的构造方法!!!
    5. public int Id;
    6. public String Name;
    7. }
    8. @WebServlet("/json")
    9. public class JsonServlet extends HttpServlet {
    10. @Override
    11. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    12. // 此处假设请求的 body 格式为
    13. // { Id: 10, name: "张三" }
    14. ObjectMapper objectMapper = new ObjectMapper();
    15. //readValue 第一个参数可以是字符串,也可以是输入流
    16. //第二个参数,是一个类对象,也就是要解析出来的结果的对象的类
    17. Person p = objectMapper.readValue(req.getInputStream(),Person.class);
    18. System.out.println(p.Id);
    19. System.out.println(p.Name);
    20. //设置字符集
    21. resp.setContentType("text/html; charset=utf8");
    22. resp.getWriter().write(p.Id +", "+ p.Name);
    23. }
    24. }

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

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

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

     返回选择下面 Body -> raw -> JSON,并在下发输入要发送的 json 数据

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

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

     同时,在Idea 中也有打印

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

    4、构造一个复杂的 json

    复杂 json 本质不变,其实就是一个嵌套结构

    1. class Score{
    2. public ArrayList scores;
    3. }
    4. class Person{
    5. public int Id;
    6. public String Name;
    7. public Score score;
    8. }
    9. @WebServlet("/json")
    10. public class JsonServlet extends HttpServlet {
    11. @Override
    12. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    13. ObjectMapper objectMapper = new ObjectMapper();
    14. Person s = objectMapper.readValue(req.getInputStream(),Person.class);
    15. resp.setContentType("text/html; charset = utf8");
    16. resp.getWriter().write(s.Id +", "+s.Name+", "+s.score.scores);
    17. }
    18. }

  • 相关阅读:
    CopyOnWriteArrayList源码分析
    《SpringBoot篇》14.@AutoConfigureMockMvc测试类实现Web层测试
    100106. 元素和最小的山形三元组 I
    成功转行软件测试感受,一个从业3年的过来人告诉你
    日本地产咨询公司【Metros】申请1700万美元纳斯达克IPO上市
    【Linux】进程间通信
    wenet--学习笔记(1)
    商城项目08_三级分类前端展示、新增、修改、删除
    uniapp 悬浮窗-任意界面 Ba-FloatWinWeb
    局限性贪心考虑分析贪心状态数:1012T2
  • 原文地址:https://blog.csdn.net/weixin_53564801/article/details/128072041