瑞安市建设工程质量监督站网站,网站开发预算,小程序发布流程怎么弄,微网站和手机网站的区别目录 1. 关于json
2. 通过Maven仓库#xff0c;将Jackson下载导入到项目中
3. 使用Jackson
3.1 关于readValue方法
3.2 关于Request.class类对象
3.3 关于request对象的属性类型
3.4 关于writeValueAsString 前端向后端传递参数通常有三种方法#xff1a;
第一种将Jackson下载导入到项目中
3. 使用Jackson
3.1 关于readValue方法
3.2 关于Request.class类对象
3.3 关于request对象的属性类型
3.4 关于writeValueAsString 前端向后端传递参数通常有三种方法
第一种
【JavaEE】_前端使用GET请求的queryString向后端传参-CSDN博客
第二种
【JavaEE】_前端POST请求借助form表单向后端传参-CSDN博客
第三种
使用POST请求的body部分向后端传参且body格式为json格式
本篇介绍第三种方法 1. 关于json
1. body部分的格式就是json
此时请求报头部分有Content - Type : application / json
2. 对于通过GET请求的query string部分传参和通过POST请求的body的form表单格式传参是servlet天然支持的但是对于POST请求的body使用json格式传参servlet本身并不支持需要引入额外的第三方库
3. json本质也是键值对但规则和form表单不同解析方式也不同。且json支持嵌套手写解析json并不容易
4. json的第三方库非常丰富本专栏使用jackson。(spring官方推荐jackson被spring集成
代码编写详情如下
2. 通过Maven仓库将Jackson下载导入到项目中 选择Jackson Databind版本 复制并粘贴至pom.xml中 引入依赖后pom.xml内容如下
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdorg.example/groupIdartifactIdServlet/artifactIdversion1.0-SNAPSHOT/versionpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependencies!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --dependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.1.0/versionscopeprovided/scope/dependency!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.15.0/version/dependency/dependenciespackagingwar/packagingbuildfinalNameServlet/finalName/build/project
如果导入缓慢或失败可以点击Maven面板的刷新按钮此处不再赘述若对导入依赖仍有疑问请查看本专栏Servlet程序编写方法一文链接如下
【JavaEE】_Servlet程序的编写方法-CSDN博客
3. 使用Jackson
1. Jackson的重点为一个对象和两个方法
一个对象ObjectMapper类
两个方法readValue方法和WriteAsString方法
2. 使用一个ObjcectMapper类对象映射器可以把json字符串映射为一个Java对象或把一个java对象映射成json字符串
在网络传输中使用的是json字符串
在实现业务逻辑的java代码中使用的是java对象
站在服务器角度就需要把获取到的请求json字符串先映射为java对象
再进行一系列业务逻辑处理。
处理完毕后还需要把处理完的java对象再映射回json字符串通过响应返回
3. json字符串向java对象的映射json字符串——java对象使用readValue方法 java对象向json字符串的映射java对象——json字符串使用writeValueAsString方法
现约定请求格式如下
POST /json
Content-Type: application/json{username:zhangsan,password:123
}
约定响应格式如下也按照json来组织
{ok: true
}
.java文件内容如下
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;
class Request{public String username;public String password;
}
class Response{public boolean ok;
}
WebServlet(/Json)
public class JsonParameterServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// 1. 获取请求body并将其按照json格式解析为请求java对象ObjectMapper objectMapper new ObjectMapper();Request request objectMapper.readValue(req.getInputStream(), Request.class);System.out.println(username: request.username);System.out.println(password: request.password);// 2. 构造响应java对象并将其转为json格式字符串Response response new Response();response.ok true;String respJson objectMapper.writeValueAsString(response);resp.setContentType(application/json; charsetutf8);resp.getWriter().write(respJson);}
}使用postman构造一个POST请求发送 获取到的响应如下 在服务器日志端也可获取到前端的参数 3.1 关于readValue方法 1. 把body的流对象方法的第一个参数直接传给readValue这个方法内部就会读取InputStream中的所有数据HTTP请求中的body即json字符串
2. 尝试把json字符串解析成Map键值对
3. 把Map转换成java对象方法的第二个参数
readValue内部就可以通过反射API创建出Request.class实例并且根据Request.class提供的属性的名字username和password来查询上述Map把得到的结果zhangsan和123赋值给对应的属性username和password从而获取到了一个完整的Request对象
请注意反射属于非常规操作除非万不得已在开发中不要随便使用反射
3.2 关于Request.class类对象
对于一个java代码会被javac编译成.class文件二进制这个文件包含了.java源代码中的核心信息比如类的名称、属性及其类型、方法及其参数与类型、父类、实现的接口、注解等等
当java进程启动就会读取.class文件把这些二进制内容读到内存并进行解析这个过程称为类加载。
类加载完毕后就会在内存中获取到一个类对象。
故而.class文件中的所有信息也都在类对象中了。
可以将类对象理解为一个类的图纸后续要构造这个类的实例都是基于类对象来进行展开的
3.3 关于request对象的属性类型
在本例中Request对象的两个属性均使用public修饰
class Request{public String username;public String password;
}
如果要将属性被private修饰必须提供对应的Getter和Setter方法
否则Jackson只会处理public属性
3.4 关于writeValueAsString
可以将writeValueAsString视为readValue的反向操作这个方法可以把一个java对象映射成json字符串
1. 通过传入的参数获取到类对象通过反射获取到属性ok
2. 根据属性名获取属性值true
3. 把上述属性名与属性值按照json格式构造成字符串reqJson作为返回值