JSON 前后端交互的信息使者——20分钟速通直接去坟头偷吃贡品

本篇内容:JSON 前后端交互的信息使者——20分钟速通直接去坟头偷吃贡品

文章专栏:SSM入门到入坟——一站式基础以及进阶栏目

更新周期:2022年1月19日

最近更新:2022年1月19日 Cookie与Session 入门到进阶——一文通透面试考点——从0到1你真的会曲奇和主菜么

个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)

点赞 收藏 ⭐留言 一键三连 关爱程序猿,从你我做起

本文目录

  • JSON 前后端交互的信息使者
    • 写在前面
    • 1、JSON简介
      • 1、JSON是什么?
    • 2、快速上手JSON
      • 1、JSON语法
      • 2、在JavaScript快速获取数据
      • 3、在Java中如何使得JSON数据与Java对象转换
      • 4、Java对象转换为JSON数据
    • 3、注解开发
    • ✨4、项目实例:用户注册前后端交互是否存在当前用户✨
    • 写在后面

JSON 前后端交互的信息使者

写在前面

再次快速上手熟悉一下前端必要的知识,因为后面做项目用到前后端分离技术跨域的数据交换都是用到JSON来进行传输的,而且搭建前端页面用到的Vue框架也只是搭框架,真正的模板的数据响应还得靠咱们的ajax异步请求来实现数据展示,所以快速重温,没啥毛病

1、JSON简介

1、JSON是什么?

JSON是什么?

JSON(JavaScript Object Notation)称之为JavaScript对象标记法

同时他也是一种轻量级基于文本的可读的格式。

至于它为什么那么火!还得从十多年前它的创始人所说,“此格式永远不升级”那句话说起,毕竟能坚持十多年的稳定性,他不火都有点难说过去了,是吧~

特点:

  • 方便存储交换文本信息
  • 进行前后端的数据传输
  • 人们经常拿这个东西与XML进行比较,相较而言,JSON更快,更容易解析。
Student s = new Student();
s.setName("Alascanfu");
s.setAge(20);
s.setGender("男");

2、快速上手JSON

1、JSON语法

语法及其简单精妙,概括如下

键值对(“name”:“value”):简洁么?美如画!

  • 数字、字符串、布尔值、数组、对象甚至null都可为value进行赋值。
  • 数据与数据之间用,连接。
  • 数组用[]表示。
  • 对象用{}表示。

还有么??没了,就这么多!

给你段代码你来品一品~

{
  "Alascanfu": {
    "technology": [ 
      {
        "name": "Java""years": "3"
      }{
        "name": "Data Structures and Algorithms""years": "2" 
      }
    ],
    "database": [
      {
        "name": "redis""years": "2" 
      },
	  {
        "name": "mysql""years": "3" 
      }
    ]
  }
}

按照上述的简单语法我觉得读取这一段代码,oh 不这段文字你应该能知道什么意思~

2、在JavaScript快速获取数据

var Student = {"name":"Alascanfu", "age":20, "gender":true};

for (var key in Student){
    // Student.key获取不行。因为相当于  Student."name"
    // alert(key + ":" + Student.key);
    alert(key + ":" + Student[key]);
}

3、在Java中如何使得JSON数据与Java对象转换

你要会用的JSON解析器

目前项目中小付用到的最多的就是FastJsonGson,以前刚入门的时候用到的是Jackson

这里用Jackson来演示:

步骤1:添加Jackson依赖到pom.xml文件中

<dependency>
      <groupId>com.fasterxml.jackson.coregroupId>
      <artifactId>jackson-coreartifactId>
      <version>2.13.0-rc1version>
dependency>
<dependency>
       <groupId>com.fasterxml.jackson.coregroupId>
       <artifactId>jackson-annotationsartifactId>
       <version>2.13.0-rc1version>
dependency>
<dependency>
       <groupId>com.fasterxml.jackson.coregroupId>
       <artifactId>jackson-databindartifactId>
       <version>2.13.0-rc1version>
dependency>

步骤2:编写Student类 以及测试类

Student.java

public class Student {
    private String name;
    
    private String gender;
    
    private int age;
    
    public Student() {
    }
    
    public Student(String name, String gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getGender() {
        return gender;
    }
    
    public void setGender(String gender) {
        this.gender = gender;
    }
    
    public int getAge() {
        return age;
    }
    
    public void setAge(int age) {
        this.age = age;
    }
    
    @Override
    public String toString() {
        return "Student{" +
            "name='" + name + '\'' +
            ", gender='" + gender + '\'' +
            ", age=" + age +
            '}';
    }
}

Test.java

public class Test {
    @org.junit.Test
    public void testJson() throws JsonProcessingException {
        String json = "{\"gender\":\"男\",\"name\":\"Alascanfu\",\"age\":23}";
    
        ObjectMapper mapper = new ObjectMapper();
        Student student = mapper.readValue(json, Student.class);
        System.out.println(student);// 输出Student类的toString()
    }
}

运行结果:

Student{name='Alascanfu', gender='男', age=23}

Process finished with exit code 0

4、Java对象转换为JSON数据

writeValue(参数1,obj):         

参数1:

File:将obj对象转换为JSON字符串,并保存到指定的文件中

Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中

OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中

步骤1:创建一个Java对象调用ObjectMapper的方法

Test.java

public class Test {
    @org.junit.Test
    public void testJson() throws JsonProcessingException {
        Student student = new Student("Alascanfu", "男", 20);
    
        ObjectMapper mapper = new ObjectMapper();
        String string = mapper.writeValueAsString(student);
        System.out.println(student);
    }
}

运行结果

Student{name='Alascanfu', gender='男', age=20}

Process finished with exit code 0

这里输出的数据就是传输的JSON数据

还可以将JSON数据持久化:

//writeValue,将数据写到当前工程下
        mapper.writeValue(new File("a.txt"), student);

        //writeValue,将数据关联到Writer中
        mapper.writeValue(new FileWriter("b.txt"),student);

JSON 前后端交互的信息使者——20分钟速通直接去坟头偷吃贡品_第1张图片

3、注解开发

这块在项目中应用的比较多,因为用户的某些属性不能通过JSON数据返回到浏览器当中的,因为可能造成数据伪造``导致用户账号密码被泄露,所以一般要排除的属性值就要通过注解来修饰。

-@JsonIgnore:排除传输的属性
-@JsonFormat:属性值进行格式化输出传输

@JsonIgnore
    public Collection<? extends GrantedAuthority> getAuthorities() {
        List<SimpleGrantedAuthority> authorities = new ArrayList<>(roles.size());
        for (Role role : roles) {
            authorities.add(new SimpleGrantedAuthority(role.getName()));
        }
        return authorities;
    }

比如说权限获得的项目板块这个数据就不能传给用户,加入用户通过此数据进行修改拟提交,那么危害会很大!!!

@JsonFormat(pattern = "yyyy-MM-dd")

输出日期就常用这个~

✨4、项目实例:用户注册前后端交互是否存在当前用户✨

步骤1:编写Servlet程序

FindUserServlet.java

package com.alascanfu.servlet;

import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@WebServlet("/findUserServlet")
public class FindUserServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.获取用户名
        String username = request.getParameter("username");
        
        // 2.调用service层判断用户名是否存在
        //设置响应的数据格式为json
        response.setContentType("application/json;charset=utf-8");
        
        Map<String , Object> map = new HashMap<>();
        if("Alascanfu".equals(username)){
            //存在
            map.put("userExsit",true);
            map.put("msg","此用户名太受欢迎,请更换一个");
        }else{
            //不存在
            map.put("userExsit",false);
            map.put("msg","用户名可用");
        }
        
        //将map转为json,传递给客户端交付检测
        ObjectMapper mapper = new ObjectMapper();
        //并且传递给客户端
        mapper.writeValue(response.getWriter(),map);
        
    }
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

编写注册页面

<%--
  Created by IntelliJ IDEA.
  User: 帝白灬黎墨
  Date: 2022/1/19
  Time: 0:55
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>



    
    注册页面
    
    





JSON 前后端交互的信息使者——20分钟速通直接去坟头偷吃贡品_第2张图片

JSON 前后端交互的信息使者——20分钟速通直接去坟头偷吃贡品_第3张图片

这里应用到了$ajax异步请求技术实时更新前端数据。

写在后面

一个人必须不停地写作

才能不被茫茫人海湮灭

今天小付又完成了这门JSON的快速重温

主要目的是为了前后端分离项目数据交互做铺垫

一天学一点

肯定没问题啦~

本文截止6370字

加油哦 兄弟们~

你可能感兴趣的:(SSM框架入门到底,json,交互,前端,后端,java)