首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring MVC 返回 JSON 實戰:Fastjson 與 Jackson 兩大主流方案完整配置指南

     編輯:Java 綜合教學

前言:異步交互時代的 JSON 返回目標

現代 Web 應用為了提升用戶體驗,廣泛採用 AJAX 異步局部刷新技術,前後端數據交互格式首選 JSON。本文基於 Spring MVC 框架,詳細介紹 Fastjson 與 Jackson 兩大主流 JSON 庫的整合配置全過程,助你快速實現對象自動序列化為 JSON 響應。

方案一:阿里巴巴 Fastjson 整合

1. 依賴引入

下載 fastjson-1.1.34.jar(或更新版本)放入項目 classpath,Maven 用戶可直接添加坐標:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version> <!-- 建議使用較新穩定版 -->
</dependency>

2. Spring MVC 配置文件核心配置

<!-- 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>

3. Controller 實戰代碼

@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 字符串輸出。

方案二:Jackson 整合(Spring 4.x 環境)

1. 依賴引入(三件套)

<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>

2. Spring 4.x 配置要點

<!-- 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。

3. Controller 代碼完全復用

同樣的 Controller 代碼無需修改,Jackson 會自動處理對象到 JSON 的序列化。

兩大方案對比與選型建議

維度FastjsonJackson
性能極快,零依賴,適合高併發優秀,功能豐富,社區活躍
易用性配置簡單,對國人友好註解豐富(@JsonProperty 等),國際標準
特殊場景循環引用處理、日期格式化內置強大多態反序列化、模塊化擴展性強
推薦場景國內項目、追求極致性能、簡單對象國際化項目、複雜對象圖、需嚴格遵循 JSON 標準

常見坑點提示

  • 缺少 @ResponseBody 或 @RestController:返回值會被視為視圖名,導致 404 或模板渲染錯誤。
  • 未開啟 <mvc:annotation-driven />:註解驅動是消息轉換器自動註冊的前提。
  • Jackson 版本不匹配:core、databind、annotations 三模塊版本必須一致,否則運行期 NoSuchMethodError。
  • 日期格式默認差異:Fastjson 默認時間戳,Jackson 默認 ISO-8601,建議統一配置 dateFormat。

總結

Spring MVC 返回 JSON 的核心在於:開啟註解驅動 + 配置對應 HttpMessageConverter + Controller 方法加 @ResponseBody。Fastjson 與 Jackson 各有千秋,根據項目屬性與團隊習慣選型即可。配置完成後,前端 AJAX 回調即可直接操作 JSON 對象,實現流暢的異步交互體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved