Java案例怎么返回JSON数据?

wen java案例 24

本文目录导读:

Java案例怎么返回JSON数据?

  1. 使用Spring Boot(最常用)
  2. 使用Servlet + Gson
  3. 使用Servlet + Jackson
  4. 使用FastJson
  5. 注意事项

在Java中返回JSON数据有多种方式,我为你介绍几种最常用的方法:

使用Spring Boot(最常用)

添加依赖(pom.xml)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

示例代码

@RestController
@RequestMapping("/api")
public class UserController {
    // 返回单个对象
    @GetMapping("/user")
    public User getUser() {
        User user = new User();
        user.setId(1);
        user.setName("张三");
        user.setAge(25);
        return user;  // Spring Boot 自动转换为 JSON
    }
    // 返回列表
    @GetMapping("/users")
    public List<User> getUsers() {
        List<User> users = new ArrayList<>();
        users.add(new User(1, "张三", 25));
        users.add(new User(2, "李四", 30));
        return users;
    }
    // 返回自定义响应格式
    @GetMapping("/user/{id}")
    public Result<User> getUserById(@PathVariable int id) {
        User user = new User(id, "王五", 28);
        return Result.success(user);
    }
}
// 通用响应类
class Result<T> {
    private int code;
    private String message;
    private T data;
    public static <T> Result<T> success(T data) {
        Result<T> result = new Result<>();
        result.code = 200;
        result.message = "成功";
        result.data = data;
        return result;
    }
    // getter/setter...
}
// 实体类
class User {
    private int id;
    private String name;
    private int age;
    // 构造器、getter/setter...
}

使用Servlet + Gson

添加依赖

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

示例代码

@WebServlet("/api/user")
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
            throws ServletException, IOException {
        // 设置响应类型
        resp.setContentType("application/json;charset=utf-8");
        resp.setCharacterEncoding("UTF-8");
        // 创建数据
        Map<String, Object> result = new HashMap<>();
        result.put("code", 200);
        result.put("message", "成功");
        Map<String, Object> user = new HashMap<>();
        user.put("id", 1);
        user.put("name", "张三");
        user.put("age", 25);
        result.put("data", user);
        // 转换为JSON并输出
        Gson gson = new Gson();
        String json = gson.toJson(result);
        PrintWriter out = resp.getWriter();
        out.print(json);
        out.flush();
        out.close();
    }
}

使用Servlet + Jackson

添加依赖

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

示例代码

@WebServlet("/api/json")
public class JsonServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
            throws ServletException, IOException {
        resp.setContentType("application/json;charset=UTF-8");
        ObjectMapper mapper = new ObjectMapper();
        // 创建对象
        List<User> users = Arrays.asList(
            new User(1, "张三", 25),
            new User(2, "李四", 30)
        );
        // 转换为JSON
        String json = mapper.writeValueAsString(users);
        resp.getWriter().write(json);
    }
}

使用FastJson

添加依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>2.0.42</version>
</dependency>

示例代码

@WebServlet("/api/fastjson")
public class FastJsonServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
            throws ServletException, IOException {
        resp.setContentType("application/json;charset=UTF-8");
        // 创建数据
        Map<String, Object> data = new HashMap<>();
        data.put("code", 200);
        data.put("message", "成功");
        List<Map<String, Object>> list = new ArrayList<>();
        Map<String, Object> item1 = new HashMap<>();
        item1.put("id", 1);
        item1.put("name", "张三");
        list.add(item1);
        data.put("data", list);
        // 转换为JSON
        String json = JSON.toJSONString(data);
        resp.getWriter().write(json);
    }
}

注意事项

设置响应头

// 必须设置的重要响应头
resp.setContentType("application/json;charset=UTF-8");
resp.setCharacterEncoding("UTF-8");
// 禁用缓存(可选)
resp.setHeader("Cache-Control", "no-cache");
resp.setHeader("Pragma", "no-cache");

处理对象循环引用

// Jackson 处理循环引用
@JsonIgnoreProperties(value = {"handler", "hibernateLazyInitializer"})
public class User {
    // ...
}
// FastJson 处理
@JSONField(serialize = false)
private List<Order> orders;  // 不序列化这个字段

最佳实践建议

  1. Spring Boot项目:使用@RestController注解,最简单
  2. 传统Servlet项目:推荐使用Jackson或Gson
  3. 统一响应格式:创建通用的Result类,统一code、message、data结构
  4. 处理日期格式
    // Spring Boot 配置
    spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
    spring.jackson.time-zone=GMT+8

选择哪种方式主要取决于你的项目框架和技术栈,如果是新项目,强烈推荐使用Spring Boot。

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