好的!下面针对你提到的四个应用场景(前后端通信、日志记录、缓存与消息队列、配置文件解析),我将分别提供:
- 具体需求描述
- 使用 Fastjson 2(推荐版本)的完整代码示例
- 说明关键点
环境前提 :Spring Boot 3.x + JDK 17+,使用 Fastjson 2 (
com.alibaba.fastjson2:fastjson2)
1. 前后端通信(RESTful API)
🔹 需求
实现一个用户注册接口:
- 前端发送 JSON:
{"username": "alice", "email": "alice@example.com"} - 后端接收并自动反序列化为
UserDTO对象 - 处理后返回 JSON 响应:
{"id": 1001, "status": "success"}
🔹 代码实现
(1) 添加依赖(pom.xml)
xml
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.43</version>
</dependency>
(2) 配置 Fastjson 2 为 Spring Boot 默认 JSON 处理器
java
// config/Fastjson2Config.java
import com.alibaba.fastjson2.support.config.FastJsonConfig;
import com.alibaba.fastjson2.support.spring6.http.converter.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
@Configuration
public class Fastjson2Config implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setWriterFeatures(); // 可添加格式化等特性
converter.setFastJsonConfig(config);
converters.add(0, converter); // 插入首位,优先使用
}
}
(3) DTO 和 Controller
java
// dto/UserDTO.java
public class UserDTO {
private String username;
private String email;
// getters & setters
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
// dto/ResponseDTO.java
public class ResponseDTO {
private Long id;
private String status;
// constructors, getters, setters
public ResponseDTO(Long id, String status) {
this.id = id;
this.status = status;
}
// ... getters/setters
}
// controller/UserController.java
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/user")
public class UserController {
@PostMapping("/register")
public ResponseDTO register(@RequestBody UserDTO userDTO) {
// 模拟业务处理
System.out.println("接收到用户: " + userDTO.getUsername());
return new ResponseDTO(1001L, "success");
}
}
🔹 测试
bash
curl -X POST http://localhost:8080/api/user/register \
-H "Content-Type: application/json" \
-d '{"username":"alice","email":"alice@example.com"}'
✅ 前端发送 JSON → 后端自动反序列化为 UserDTO → 返回 JSON 响应
2. 日志记录(结构化日志)
🔹 需求
在接口调用时,将请求体以 JSON 格式打印到日志,便于 ELK 收集分析。
🔹 代码实现
java
// service/UserService.java
import com.alibaba.fastjson2.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private static final Logger logger = LoggerFactory.getLogger(UserService.class);
public void processUser(UserDTO userDTO) {
// 结构化日志:整个对象转 JSON
logger.info("处理用户请求: {}", JSON.toJSONString(userDTO));
// 也可只记录部分字段
logger.warn("敏感操作 - 用户名: {}", JSON.toJSONString(userDTO.getUsername()));
}
}
🔹 日志输出示例
2025-12-26 10:00:00 INFO UserService: 处理用户请求: {"username":"alice","email":"alice@example.com"}
✅ 便于日志系统按字段(如 email)检索或告警
3. 缓存与消息队列(Redis + Kafka 示例)
🔹 需求
- 将用户对象存入 Redis(作为缓存)
- 同时发送用户注册事件到 Kafka(JSON 格式)
🔹 代码实现
(1) 存入 Redis(使用 Spring Data Redis)
java
// service/CacheService.java
import com.alibaba.fastjson2.JSON;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
@Service
public class CacheService {
private final StringRedisTemplate redisTemplate;
public CacheService(StringRedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
public void cacheUser(UserDTO user) {
String key = "user:" + user.getUsername();
String jsonValue = JSON.toJSONString(user);
redisTemplate.opsForValue().set(key, jsonValue, 1, TimeUnit.HOURS);
}
public UserDTO getUser(String username) {
String json = redisTemplate.opsForValue().get("user:" + username);
return json != null ? JSON.parseObject(json, UserDTO.class) : null;
}
}
(2) 发送 Kafka 消息
java
// service/EventService.java
import com.alibaba.fastjson2.JSON;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;
@Service
public class EventService {
private final KafkaTemplate<String, String> kafkaTemplate;
public EventService(KafkaTemplate<String, String> kafkaTemplate) {
this.kafkaTemplate = kafkaTemplate;
}
public void publishUserRegistered(UserDTO user) {
String message = JSON.toJSONString(user);
kafkaTemplate.send("user-registered-topic", message);
}
}
✅ 对象 → JSON → 存储/传输 → 消费端再解析为对象
4. 配置文件解析(JSON 格式配置)
🔹 需求
项目使用 config/app-config.json 文件存储业务参数,启动时加载为 AppConfig 对象。
🔹 配置文件 src/main/resources/config/app-config.json
json
{
"maxRetry": 3,
"timeoutMs": 5000,
"featureFlags": {
"enableNewUi": true,
"useCache": false
}
}
🔹 代码实现
java
// config/AppConfig.java
public class AppConfig {
private int maxRetry;
private long timeoutMs;
private FeatureFlags featureFlags;
// Inner class
public static class FeatureFlags {
private boolean enableNewUi;
private boolean useCache;
// getters/setters
}
// getters/setters for all fields
}
// util/ConfigLoader.java
import com.alibaba.fastjson2.JSON;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
@Component
public class ConfigLoader {
public AppConfig loadAppConfig() throws Exception {
ClassPathResource resource = new ClassPathResource("config/app-config.json");
try (InputStream is = resource.getInputStream()) {
byte[] bytes = is.readAllBytes();
String json = new String(bytes, StandardCharsets.UTF_8);
return JSON.parseObject(json, AppConfig.class);
}
}
}
// 在启动时加载
import jakarta.annotation.PostConstruct;
import org.springframework.stereotype.Service;
@Service
public class InitService {
private final ConfigLoader configLoader;
public InitService(ConfigLoader configLoader) {
this.configLoader = configLoader;
}
@PostConstruct
public void init() {
try {
AppConfig config = configLoader.loadAppConfig();
System.out.println("配置加载成功: 最大重试次数 = " + config.getMaxRetry());
} catch (Exception e) {
throw new RuntimeException("配置加载失败", e);
}
}
}
✅ 启动时自动加载 JSON 配置 → 转为强类型 Java 对象
总结
| 场景 | 核心 Fastjson 2 API | 说明 |
|---|---|---|
| 前后端通信 | @RequestBody + 自动反序列化 |
需配置 FastJsonHttpMessageConverter |
| 日志记录 | JSON.toJSONString(obj) |
快速结构化输出 |
| 缓存/消息 | toJSONString() / parseObject() |
跨系统数据交换 |
| 配置解析 | JSON.parseObject(jsonStr, Class) |
替代 Properties/YAML 的灵活方案 |
💡 所有示例均基于 Fastjson 2,兼顾性能、安全性和 Spring Boot 3 兼容性。如需 Fastjson 1.x 示例(仅用于旧项目),可另行说明。
需要我提供完整可运行的 GitHub 项目结构或某个场景的单元测试吗?