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

SpringMVC 處理 Ajax 與 JSON 完整實戰:從請求綁定到響應封裝

     編輯:Java 綜合教學

SpringMVC 處理 Ajax 與 JSON 完整實戰:從請求綁定到響應封裝

核心機制:HttpMessageConverter

Spring 透過 HttpMessageConverter<T> 實現 HTTP 訊息與物件雙向轉換。引入 Jackson 後,RequestMappingHandlerAdapter 自動裝配 MappingJackson2HttpMessageConverter。

請求端:JSON 綁定到物件

1. 簡單物件(表單式提交無需 JSON)


// JS
$.post("testJson", {name:"abc", age:23});

// Controller
@PostMapping("/testJson")
public Person testJson(Person person) { ... } // 自動綁定

2. 複雜物件/集合(需 JSON 格式)


// JS: contentType 必須指定
$.ajax({
  url: "testJson6",
  type: "POST",
  contentType: "application/json;charset=utf-8",
  data: JSON.stringify([{name:"A",age:1},{name:"B",age:2}]),
  success: ...
});

// Controller: @RequestBody 必加
@PostMapping("/testJson6")
public String testJson6(@RequestBody List persons) { ... }

表單序列化最佳實踐


// jQuery 擴充:表單轉物件
$.fn.serializeObject = function() {
  var o = {}, a = this.serializeArray();
  $.each(a, function() {
    if (o[this.name]) {
      o[this.name] = [].concat(o[this.name], this.value);
    } else o[this.name] = this.value;
  });
  return o;
};

// 使用
var json = JSON.stringify($('form').serializeObject());
$.ajax({ contentType: "application/json", data: json, ... });

進階場景處理

場景方案
單表單 + 額外參數後端接收 @RequestParam("formJson") String + 自定義轉換器或 Jackson 手動解析
多表單合併提交前端組裝陣列 [{form1}, {form2}],後端 @RequestBody List
一個表單多實體(同名欄位)命名 name="field[0]",配合自定義 Converter 解析

響應端:物件自動轉 JSON


@PostMapping("/returnJson")
@ResponseBody
public AjaxResult returnJson() {
    return AjaxResult.success(Map.of("user", user, "token", token));
}

// 通用響應封裝
public class AjaxResult implements Serializable {
    private String code;    // 0000 成功, 0001 失敗
    private String message;
    private Object data;
    // getter/setter + 靜態工廠方法 success()/fail()
}

Request Payload vs Form Data

  • contentType: application/json → 請求體為 JSON 字串,見於 Request Payload
  • 預設表單提交 → Form Data,鍵值對格式
  • 後端 @RequestBody 僅讀取 Request Payload

避坑指南

  1. Jackson 版本與 SpringMVC 版本匹配
  2. 日期型別需配置 ObjectMapper 格式化
  3. 大量資料考慮分頁或流式響應
  4. 跨域請求需配置 CORS 或 @CrossOrigin
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved