Java JSON接收案例如何实现

wen java案例 28

Java JSON接收案例实现

这里提供一个完整的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();
    }
}

注意事项

  1. JSON格式校验:确保JSON格式正确,字段名与Java属性名匹配
  2. 构造器:Java类必须有默认无参构造器
  3. getter/setter:必须提供public的getter和setter方法
  4. 日期处理:日期类型需要添加注解或配置格式
  5. 异常处理:JSON解析可能抛出异常,需要捕获处理
  6. 性能考虑
    • Jackson性能最好
    • Fastjson速度较快
    • Gson稳定性高

选择哪种JSON库取决于你的具体需求,Spring Boot默认使用Jackson,如果没有特殊需求推荐使用Jackson。

抱歉,评论功能暂时关闭!