本篇内容:JSON 前后端交互的信息使者——20分钟速通直接去坟头偷吃贡品
文章专栏:SSM入门到入坟——一站式基础以及进阶栏目
更新周期:2022年1月19日
最近更新:2022年1月19日 Cookie与Session 入门到进阶——一文通透面试考点——从0到1你真的会曲奇和主菜么
个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)
点赞 收藏 ⭐留言 一键三连 关爱程序猿,从你我做起
再次快速上手熟悉一下前端必要的知识
,因为后面做项目用到前后端分离技术
,跨域的数据交换都是用到JSON来进行传输的
,而且搭建前端页面用到的Vue框架也只是搭框架
,真正的模板的数据响应
还得靠咱们的ajax异步请求
来实现数据展示,所以快速重温,没啥毛病
。
JSON是什么?
JSON(JavaScript Object Notation)称之为JavaScript对象标记法
。
同时他也是一种轻量级
、基于文本的
、可读
的格式。
至于它为什么那么火!还得从十多年前它的创始人所说,“此格式永远不升级
”那句话说起,毕竟能坚持十多年的稳定性
,他不火都有点难说过去了,是吧~
特点:
存储
和交换文本信息
前后端的数据传输
Student s = new Student();
s.setName("Alascanfu");
s.setAge(20);
s.setGender("男");
语法及其简单精妙,概括如下
键值对(“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 不这段文字你应该能知道什么意思~
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]);
}
你要会用的JSON解析器
目前项目中小付用到的最多的就是FastJson
和Gson
,以前刚入门的时候用到的是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
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数据返回到浏览器
当中的,因为可能造成数据伪造``导致用户账号密码被泄露
,所以一般要排除的属性值就要通过注解
来修饰。
-@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")
输出日期就常用这个~
步骤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" %>
注册页面
这里应用到了$ajax异步请求技术实时更新前端数据。
一个人必须不停地写作
才能不被茫茫人海湮灭
今天小付又完成了这门JSON的快速重温
主要目的是为了前后端分离项目数据交互做铺垫
一天学一点
肯定没问题啦~
本文截止6370字
加油哦 兄弟们~