Java JSON接收案例实现
这里提供一个完整的Java JSON接收案例,包括多种实现方式:

使用Maven依赖配置
<!-- Jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
<!-- Gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
<!-- Fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.35</version>
</dependency>
定义数据模型
// User.java
public class User {
private int id;
private String name;
private int age;
private String email;
private Address address;
// 无参构造器(必需)
public User() {}
// getter和setter方法
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public Address getAddress() { return address; }
public void setAddress(Address address) { this.address = address; }
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", email='" + email + '\'' +
", address=" + address +
'}';
}
}
// Address.java
public class Address {
private String street;
private String city;
private String zipCode;
public Address() {}
public String getStreet() { return street; }
public void setStreet(String street) { this.street = street; }
public String getCity() { return city; }
public void setCity(String city) { this.city = city; }
public String getZipCode() { return zipCode; }
public void setZipCode(String zipCode) { this.zipCode = zipCode; }
@Override
public String toString() {
return "Address{" +
"street='" + street + '\'' +
", city='" + city + '\'' +
", zipCode='" + zipCode + '\'' +
'}';
}
}
JSON字符串示例
{
"id": 1,
"name": "张三",
"age": 25,
"email": "zhangsan@example.com",
"address": {
"street": "北京市朝阳区",
"city": "北京",
"zipCode": "100000"
}
}
使用Jackson接收JSON
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class JacksonExample {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"id\":1,\"name\":\"张三\",\"age\":25,\"email\":\"zhangsan@example.com\",\"address\":{\"street\":\"北京市朝阳区\",\"city\":\"北京\",\"zipCode\":\"100000\"}}";
try {
// 单个对象
User user = mapper.readValue(jsonString, User.class);
System.out.println("用户信息:" + user);
// JSON数组转为List
String jsonArray = "[{\"id\":1,\"name\":\"张三\"},{\"id\":2,\"name\":\"李四\"}]";
List<User> userList = mapper.readValue(jsonArray,
new TypeReference<List<User>>() {});
System.out.println("用户列表:" + userList);
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用Gson接收JSON
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.List;
public class GsonExample {
public static void main(String[] args) {
Gson gson = new Gson();
String jsonString = "{\"id\":1,\"name\":\"张三\",\"age\":25,\"email\":\"zhangsan@example.com\",\"address\":{\"street\":\"北京市朝阳区\",\"city\":\"北京\",\"zipCode\":\"100000\"}}";
// 单个对象
User user = gson.fromJson(jsonString, User.class);
System.out.println("用户信息:" + user);
// JSON数组转为List
String jsonArray = "[{\"id\":1,\"name\":\"张三\"},{\"id\":2,\"name\":\"李四\"}]";
List<User> userList = gson.fromJson(jsonArray,
new TypeToken<List<User>>(){}.getType());
System.out.println("用户列表:" + userList);
}
}
使用Fastjson接收JSON
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import java.util.List;
public class FastjsonExample {
public static void main(String[] args) {
String jsonString = "{\"id\":1,\"name\":\"张三\",\"age\":25,\"email\":\"zhangsan@example.com\",\"address\":{\"street\":\"北京市朝阳区\",\"city\":\"北京\",\"zipCode\":\"100000\"}}";
// 单个对象
User user = JSON.parseObject(jsonString, User.class);
System.out.println("用户信息:" + user);
// JSON数组转为List
String jsonArray = "[{\"id\":1,\"name\":\"张三\"},{\"id\":2,\"name\":\"李四\"}]";
List<User> userList = JSON.parseObject(jsonArray,
new TypeReference<List<User>>(){}.getType());
System.out.println("用户列表:" + userList);
// 或者使用parseArray
List<User> userList2 = JSON.parseArray(jsonArray, User.class);
System.out.println("用户列表2:" + userList2);
}
}
Spring Boot Controller接收JSON
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api")
public class UserController {
// 接收单个JSON对象
@PostMapping("/user")
public String addUser(@RequestBody User user) {
System.out.println("接收到的用户:" + user);
return "用户添加成功:" + user.getName();
}
// 接收JSON数组
@PostMapping("/users")
public String addUsers(@RequestBody List<User> users) {
System.out.println("接收到的用户列表:" + users);
return "添加了 " + users.size() + " 个用户";
}
// 接收复杂JSON(包含嵌套对象)
@PostMapping("/user/detail")
public String addUserDetail(@RequestBody User user) {
System.out.println("用户详细信息:" + user);
System.out.println("地址:" + user.getAddress());
return "用户详情保存成功";
}
}
发送JSON的测试代码
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public class JsonClient {
public static void main(String[] args) throws Exception {
// 发送POST请求
URL url = new URL("http://localhost:8080/api/user");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json; utf-8");
conn.setDoOutput(true);
String jsonString = "{\"id\":1,\"name\":\"张三\",\"age\":25,\"email\":\"zhangsan@example.com\"}";
try(OutputStream os = conn.getOutputStream()) {
byte[] input = jsonString.getBytes(StandardCharsets.UTF_8);
os.write(input, 0, input.length);
}
// 获取响应
int responseCode = conn.getResponseCode();
System.out.println("响应代码:" + responseCode);
conn.disconnect();
}
}
注意事项
- JSON格式校验:确保JSON格式正确,字段名与Java属性名匹配
- 构造器:Java类必须有默认无参构造器
- getter/setter:必须提供public的getter和setter方法
- 日期处理:日期类型需要添加注解或配置格式
- 异常处理:JSON解析可能抛出异常,需要捕获处理
- 性能考虑:
- Jackson性能最好
- Fastjson速度较快
- Gson稳定性高
选择哪种JSON库取决于你的具体需求,Spring Boot默认使用Jackson,如果没有特殊需求推荐使用Jackson。