本文目录导读:

在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; // 不序列化这个字段
最佳实践建议
- Spring Boot项目:使用@RestController注解,最简单
- 传统Servlet项目:推荐使用Jackson或Gson
- 统一响应格式:创建通用的Result类,统一code、message、data结构
- 处理日期格式:
// Spring Boot 配置 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8
选择哪种方式主要取决于你的项目框架和技术栈,如果是新项目,强烈推荐使用Spring Boot。