使用 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 字段,多層嵌套增加解析成本。
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。
CommonResponse)的場景。user、menu),該屬性不生效,仍輸出完整 Map 結構。@RestController + MappingJacksonValue 或配置 ObjectMapper 實現更靈活控制。