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

Spring MVC 返回 JSON 去除根節點名稱最佳實踐

     編輯:Java 綜合教學

Spring MVC 返回 JSON 去除根節點名稱最佳實踐

使用 MappingJackson2JsonView 直接渲染 Model 時,返回 JSON 會包含 Model 的鍵名作為根節點(如 {"commonAjaxResponse":{...}}),前端需額外解析。本文介紹通過設置 extractValueFromSingleKeyModel=true 實現扁平化輸出的簡潔方案。

問題現象

Spring XML 配置視圖解析器:

<property name="defaultViews">
  <list>
    <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
  </list>
</property>

Controller 返回 ModelAndView 或 Map 時,JSON 輸出:

{"commonAjaxResponse":{"code":1,"errorCode":null,"errorMessage":null,"data":{"key":"123"}}}

前端期望直接獲取 code、data 字段,多層嵌套增加解析成本。

解決方案:啟用 extractValueFromSingleKeyModel

MappingJackson2JsonView 提供該屬性:當 Model 僅包含單一鍵值對時,直接輸出該值而非包裹對象。

<property name="defaultViews">
  <list>
    <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
      <property name="extractValueFromSingleKeyModel" value="true" />
    </bean>
  </list>
</property>

效果對比

修改後 JSON 輸出變為扁平結構:

{"code":1,"errorCode":null,"errorMessage":null,"data":{"key":"123"}}

前端可直接 response.code、response.data 訪問,無需 response.commonAjaxResponse.code。

適用場景與注意事項

  • 適用於 Controller 統一返回單一響應對象(如 CommonResponse)的場景。
  • 若 Model 包含多個鍵(如同時放入 user、menu),該屬性不生效,仍輸出完整 Map 結構。
  • Spring Boot 2.x+ 可通過 @RestController + MappingJacksonValue 或配置 ObjectMapper 實現更靈活控制。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved