网络请求(http请求、返回规范、Json)
http请求、返回规范
http请求规范
-
请求行:请求数据的第一行
例:GET / HTTP/1.1,GET表示请求方式, /表示请求资源路径,HTTP/1.1表示版本协议 -
请求头:第二行开始,格式为key:value形式。
常见的HTTP请求头:
Host : 请求的主机名
User-Agent : 浏览器版本
Accept : 表示浏览器能接收的资源类型,text/* ,image/ *, * / *(表示所有)
Accept-Language : 表示浏览器偏好的语言,服务器可以据此返回不同语言的网页
Accept-Encoding : 表示浏览器可以支持的压缩类型,例如gzip,deflate等 -
请求体:POST请求的最后一部分,存放请求参数,请求体和请求头之间有空行
GET请求和POST请求区别:
- GET请求请求参数在请求行中,没有请求体;POST请求请求参数在请求体中
- GET请求请求参数大小有限制(浏览器对URL的长度有限制),POST没有
http返回规范
- 响应行:例:HTTP/1.1 200 OK,HTTP/1.1表示协议版本,200表示状态码(状态码大全),OK表示状态描述
状态码分类 | 说明 |
---|---|
1xx | 响应中:临时状态码,表示请求已经接受,告诉客户端应该继续请求或者它已经完成则忽略它 |
2xx | 成功:表示请求已经被成功接收,处理已完成 |
3xx | 重定向:重定向到其它地方:它让客户端再发起一个请求以完成整个处理 |
4xx | 客户端错误:处理发生错误,责任在客户端,如客户端请求一个不存在的资源(404),客户端未被授权,禁止访问等 |
5xx | 服务器端错误:处理发生错误,责任在服务器,如服务端抛出异常,路由出错,HTTP版本不支持等 |
- 响应头:第二行开始,格式为key:value形式。
Content-Type :表示该相应内容的类型,例如text/html,image/jpeg
Content-Length :表示该相应内容的长度(字节数)
Content-Encoding :表示该相应压缩算法,例如gzip
Cache-Control :指示客户端应如何缓存,例如max-age=300表示最多可以缓存300秒
- 响应体:包含服务器返回给客户端的实际数据
JSON
JSON简述
JavaScript Object Notation:JavaScript 对象表示法,其语法规则参考JavaScript对象
- JSON是一种轻量级的数据交换格式
- JSON采用完全独立于语言的文本格式,不同的编程语言JSON数据是一致的
- JSON易于人阅读和编写,同时也易于机器解析和生成
JSON语法规则
- 对象用 {} 表示
- 数组用 [ ] 表示
- 名称置于双引号内,值有字符串、数值、布尔值、null、对象、数组
{
"id": 1,
"name": "aaa",
"age": 24
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSON</title>
</head>
<body>
<script>
//采用let或var声明一个变量
//定义了JSON格式的数据,是Java中的对象
let person = {
"id":1001,
"username":"aaa",
"age":18
};
//控制台打印输出
console.log(person);
//用数组存储JSON数据
let persons = {
"persons":[
{
"id":1002,
"username":"aab",
"age":19
},
{
"id":1003,
"username":"aac",
"age":20
}
]
};
console.log(persons);
//用集合存储JSON数据
let list =[
{
"id":1004,
"username":"aad",
"age":20
},
{
"id":1005,
"username":"aae",
"age":20
}
];
console.log(list);
</script>
</body>
</html>
XML与JSON
XML与JSON都可以作为一种数据交换格式,XML是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言
区别:
- XML是重量级的,JSON是轻量级的,可以使用数组,XML在传输过程中比较占带宽,JSON占带宽少,易于压缩
- XML和JSON都用在项目交互下,XML多用于做配置文件,JSON用于数据交互
JSON
{
"name":"zhamgsan",
"age":22,
"friends":["lisi","wangwu"]
}
XML
<root>
<name>zhangsan</name>
<age>22</age>
<friends>lisi</friends>
<friends>wangwu</friends>
</root>
JSON数据的转换
FastJson
-
FastJson是一个Java库,可以将Java对象转化为JSON字符串,也可以将JSON字符串转化为Java对象
在Maven项目中使用Fastjson库,需要提前在配置文件中添加Fastjson包的依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.colobu</groupId>
<artifactId>fastjson-jaxrs-json-provider</artifactId>
<version>0.3.1</version>
</dependency>
JSON生成
ordinal:表示具体字段的输出顺序
name:表示字段转化为JSON串的字段名字
serialize:表示指定的字段不参与序列化
package com.example.demo;
import com.alibaba.fastjson.annotation.JSONField;
import java.io.Serializable;
public class Person implements Serializable {
@JSONField(ordinal = 2)
private int id;
@JSONField(ordinal = 3)
private String useranme;
@JSONField(ordinal = 1)
private int age;
@JSONField(serialize = false)
private int sex;
public Person() {
}
public Person(int id, String useranme, int age) {
this.id = id;
this.useranme = useranme;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUseranme() {
return useranme;
}
public void setUseranme(String useranme) {
this.useranme = useranme;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", useranme='" + useranme + '\'' +
", age=" + age +
'}';
}
}
package com.example.demo;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
//javaBeanToJson
Person person = new Person(1001,"aaa",22);
//JSON类中有静态方法直接调用可以将JavaBean对象转化为JSON字符串
String json = JSON.toJSONString(person);
System.out.println(json);
//JavaBean对象数组转化为JSON数组
Person p1 = new Person(1002,"bbb",18);
Person p2 = new Person(1003,"ccc",19);
Person p3 = new Person(1004,"ddd",20);
Person[] persons = {p1,p2,p3};
//数组转化为JSON格式数组
String json1 = JSON.toJSONString(persons);
System.out.println(json1);
//List转化为JSON格式
Person p4 = new Person(1005,"bbb",18);
Person p5 = new Person(1006,"ccc",19);
Person p6 = new Person(1007,"ddd",20);
List<Person> list = new ArrayList<>();
//将p1,p2,p3放在list集合里
Collections.addAll(list,p1,p2,p3);
//数组转化为JSON格式数组
String json2 = JSON.toJSONString(list);
System.out.println(json2);
}
}
JSON解析
常用方法 | 描述 |
---|---|
JSON.parseObject() | 将JSON字符串转换为Java对象,必须要有无参的构造方法 |
JSON.parseArray() | 将JSON字符串转换为集合对象 |
package com.example.demo;
import com.alibaba.fastjson.JSON;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
//JsonTojavaBean
String json = "{\"id\":1001,\"username\":\"aaa\",\"age\":18}";
Person person = JSON.parseObject(json,Person.class);
System.out.println(person);
//JSON转化为List
String json1 = "[{\"id\":1002,\"username\":\"bbb\",\"age\":19}," +
"{\"id\":1003,\"username\":\"ccc\",\"age\":20}," +
"{\"id\":1004,\"username\":\"ddd\",\"age\":21}]";
List<Person> list = JSON.parseArray(json1,Person.class);
System.out.println(list);
}
}