現代 Web 應用為了提升用戶體驗,廣泛採用 AJAX 異步局部刷新技術,前後端數據交互格式首選 JSON。本文基於 Spring MVC 框架,詳細介紹 Fastjson 與 Jackson 兩大主流 JSON 庫的整合配置全過程,助你快速實現對象自動序列化為 JSON 響應。
下載 fastjson-1.1.34.jar(或更新版本)放入項目 classpath,Maven 用戶可直接添加坐標:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version> <!-- 建議使用較新穩定版 -->
</dependency>
<!-- 1. 開啟 MVC 註解驅動,支援 @ResponseBody 等註解 -->
<mvc:annotation-driven />
<!-- 2. 配置 Fastjson 消息轉換器 -->
<bean id="fastjsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
<!-- 可選:全局序列化特性配置 -->
<property name="features">
<list>
<value>WriteMapNullValue</value>
<value>DisableCircularReferenceDetect</value>
</list>
</property>
</bean>
<!-- 3. 將轉換器註冊到 MVC 轉換器鏈 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="fastjsonHttpMessageConverter" />
</list>
</property>
</bean>
@RestController // 等同於 @Controller + 所有方法默認 @ResponseBody
@RequestMapping("/api/course")
public class CourseController {
@GetMapping("/{courseId}/{name}")
public Map<String, String> getCourseInfo(
@PathVariable("courseId") String courseId,
@PathVariable("name") String name) {
Map<String, String> result = new HashMap<>();
result.put("name", "劉曉燕");
result.put("sex", "女");
result.put("age", "23");
return result; // 自動序列化為 JSON 返回
}
}
原理:@ResponseBody(或 @RestController)標記方法返回值直接寫入 HTTP 響應體。配置好的 FastJsonHttpMessageConverter 攔截返回對象,利用 Fastjson 將 Map/POJO 自動轉為 JSON 字符串輸出。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.15.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.15.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
<!-- Jackson 2.x 對應的轉換器類 -->
<bean id="jacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
<!-- 註冊到 HandlerAdapter -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonHttpMessageConverter" />
</list>
</property>
</bean>
版本注意:Spring 3.x 需使用 MappingJacksonHttpMessageConverter(無數字 2),Spring 4+ 必須用 MappingJackson2HttpMessageConverter。
同樣的 Controller 代碼無需修改,Jackson 會自動處理對象到 JSON 的序列化。
| 維度 | Fastjson | Jackson |
|---|---|---|
| 性能 | 極快,零依賴,適合高併發 | 優秀,功能豐富,社區活躍 |
| 易用性 | 配置簡單,對國人友好 | 註解豐富(@JsonProperty 等),國際標準 |
| 特殊場景 | 循環引用處理、日期格式化內置強大 | 多態反序列化、模塊化擴展性強 |
| 推薦場景 | 國內項目、追求極致性能、簡單對象 | 國際化項目、複雜對象圖、需嚴格遵循 JSON 標準 |
@ResponseBody 或 @RestController:返回值會被視為視圖名,導致 404 或模板渲染錯誤。<mvc:annotation-driven />:註解驅動是消息轉換器自動註冊的前提。NoSuchMethodError。dateFormat。Spring MVC 返回 JSON 的核心在於:開啟註解驅動 + 配置對應 HttpMessageConverter + Controller 方法加 @ResponseBody。Fastjson 與 Jackson 各有千秋,根據項目屬性與團隊習慣選型即可。配置完成後,前端 AJAX 回調即可直接操作 JSON 對象,實現流暢的異步交互體驗。