Controller是MVC模式中的控制器,負責處理客戶端請求并將數據傳遞給Model層處理,并將處理結果返回給客戶端。在前后端分離的開發中,前端頁面通過ajax請求向Controller發送數據,Controller返回處理結果給前端,這就需要涉及到跨域操作。
為了解決跨域問題,需要在Controller類上加上@CrossOrigin注解,允許其他域名下的請求訪問該Controller。同時在方法上加上@RequestMapping注解,指定請求的路徑和請求方式。
@Controller @CrossOrigin @RequestMapping("/user") public class UserController { @RequestMapping(value = "/login", method = RequestMethod.POST) @ResponseBody public Maplogin(@RequestBody Map data) { Map map = new HashMap<>(); String userName = data.get("username"); String password = data.get("password"); //TODO: 驗證用戶名和密碼是否匹配 map.put("message", "登錄成功"); return map; } }
上述代碼中,在UserController類上添加了@CrossOrigin注解,表示允許其他域名下的請求訪問該Controller,同時在login方法上添加了@RequestMapping注解,指定了請求的路徑和請求方式為POST。此外,在方法參數中使用@RequestBody注解映射請求體中的json數據,使用Map類型接收參數。
在前端頁面,通過ajax向Controller發送json數據,并接收處理結果。代碼如下:
$.ajax({ url: "http://localhost:8080/user/login", data: JSON.stringify({ "username": "admin", "password": "123456" }), type: "POST", contentType: "application/json", dataType: "json", success: function (data) { console.log(data); }, error: function () { console.log("請求失敗!"); } });
在發送ajax請求時,需要設置請求的url、data和type屬性,其中url表示請求的路徑,data表示發送的json數據,type表示請求方式為POST。同時需要設置contentType為application/json,dataType為json,表示發送的數據類型和接收的數據類型為json格式。
總結來說,要實現Controller跨域接受json數據,需要在Controller類上添加@CrossOrigin注解,允許其他域名下的請求訪問該Controller;在方法上添加@RequestMapping注解,指定請求的路徑和請求方式;在方法參數中使用@RequestBody注解映射請求體中的json數據,使用Map類型接收參數;在前端頁面中發送ajax請求時,設置url、data、type、contentType和dataType屬性,實現跨域完成數據交互。