springMVC获取异步请求的参数,返回异步请求数据(json),跨域访问简单了解,文件上传,与Restful风格
生活随笔
收集整理的這篇文章主要介紹了
springMVC获取异步请求的参数,返回异步请求数据(json),跨域访问简单了解,文件上传,与Restful风格
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
springMVC獲取異步請求的參數
JQuery發送異步請求回顧
<a href="javascript:void(0);" id="testAjax">訪問controller</a> <script type="text/javascript" src="/js/jquery-3.3.1.min.js"></script> <script type="text/javascript">$(function(){$("#testAjax").click(function(){ //為id="testAjax"的組件綁定點擊事件$.ajax({ //發送異步調用type:"POST", //請求方式:POST請求url:"ajaxController", //請求參數(也就是請求內容)data:'ajax message', //請求參數(也就是請求內容)dataType:"text", //響應正文類型contentType:"application/text", //請求正文的MIME類型});});}); </script>springMVC中controller中獲取異步請求的參數注解@RequestBody
當前端異步請求我們的/ajaxController這個地址的時候,由于有@RequestBody這個注解,就會去請求體中找到message參數,然后將其封裝到方法的參數中
@ResponseBody 異步請求響應
controller代碼詳解
package com.fs.springmvc.controller;import com.fs.springmvc.pojo.User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List;@Controller public class AjaxController {/*@RequestMapping("/ajaxController")public String testAjax(){System.out.println("測試ajax異步請求訪問后臺方法");return "page";}*/@RequestMapping("/ajaxController")//@RequestBody注解,可以將請求體內容封裝到指定參數中//因為異步POST請求的參數在請求體中,若不添加@RequestBody,就找不到請求的參數,添加@RequestBody后就會去請求體中把參數內容封裝到指定的參數中//同步請求在地址欄中有參數,所以不用加@RequestBody這個主鍵public String testAjax(@RequestBody String message){System.out.println("測試ajax異步請求訪問后臺方法"+message);//異步請求頁面跳轉是交給前端操作的,這里實際是不會跳轉頁面的return "page";}/*//如果處理參數是POJO,且頁面發送的請求數據格式與POJO中的屬性對應,@RequestBody注解可以自動映射對應請求數據到POJO中//注意:POJO中的屬性如果請求數據中沒有,屬性值為null,POJO中沒有的屬性如果請求數據中有,不進行映射*/@RequestMapping("/ajaxPojoToController")//@RequestBody注解,可以將請求體內容封裝到指定參數中public String testAjaxPojo(@RequestBody User user){System.out.println("測試ajax異步請求訪問后臺方法"+user);return "page";}@RequestMapping("/ajaxListToController")//如果處理參數是List集合且封裝了POJO,且頁面發送的數據是JSON格式的對象數組,數據將自動映射到集合參數中public String testAjaxList(@RequestBody List<User> users){System.out.println("測試ajax異步請求訪問后臺方法"+ users);return "page";}@RequestMapping("/ajaxReturnString")//使用注解@ResponseBody可以將返回的頁面不進行解析,直接返回字符串,該注解可以添加到方法上方或返回值前面@ResponseBodypublic String ajaxReturnString(){System.out.println("測試ajax異步請求訪問后臺方法");//返回的就是forward:pagereturn "forward:page";}@RequestMapping("/ajaxReturnJson")//基于jackon技術,使用@ResponseBody注解可以將返回的POJO對象轉成json格式字符串數據,@ResponseBodypublic User ajaxReturnJson(){System.out.println("測試ajax異步請求訪問后臺方法");User user = new User();user.setName("小付");user.setAge(18);return user;}@RequestMapping("/ajaxReturnJsonList")//基于jackon技術,使用@ResponseBody注解可以將返回的保存POJO對象的集合轉成json數組格式數據@ResponseBodypublic List ajaxReturnJsonList(){System.out.println("測試ajax異步請求訪問后臺方法");User user1 = new User();user1.setName("小付");user1.setAge(18);User user2 = new User();user2.setName("小花");user2.setAge(18);List al = new ArrayList<User>();al.add(user1);al.add(user2);return al;}@RequestMapping("/cross")@ResponseBody//使用@CrossOrigin開啟跨域訪問//標注在處理器方法上方表示該方法支持跨域訪問//標注在處理器類上方表示該處理器類中的所有處理器方法均支持跨域訪問@CrossOrigin//多項目之間相互調用會存在跨域的問題,若需要跨域調用,者添加注解就支持跨域調用public User cross(HttpServletRequest request){System.out.println("測試ajax異步請求訪問后臺方法:"+request.getRequestURL());User user = new User();user.setName("小花");user.setAge(18);return user;}@RequestMapping("/testAjaxBtn")@ResponseBodypublic String testAjaxBtn(@RequestBody String name){System.out.println("測試ajax異步請求訪問后臺方法:"+name);return "ok";} }SpringMVC的跨域訪問@CrossOrigin
@RequestMapping("/cross")@ResponseBody//使用@CrossOrigin開啟跨域訪問//標注在處理器方法上方表示該方法支持跨域訪問//標注在處理器類上方表示該處理器類中的所有處理器方法均支持跨域訪問@CrossOrigin//多項目之間相互調用會存在跨域的問題,若需要跨域調用,者添加注解就支持跨域調用public User cross(HttpServletRequest request){System.out.println("測試ajax異步請求訪問后臺方法:"+request.getRequestURL());User user = new User();user.setName("小花");user.setAge(18);return user;}SpringMVC的文件上傳
xml文件需要添加一個bean
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 設置掃描spring注解的包--><context:component-scan base-package="com.fs.springmvc"/><!-- 靜態資源加載,核心控制器攔截的是所有請求,需要對靜態資源請求進行放行,通過配置放行資源實現下面這個配置是可以放行所有的普通資源調用讓springMVC不處理靜態資源,如 .css .js .html .MP3 等--><mvc:default-servlet-handler/> <!-- 配置mvc注解驅動--><mvc:annotation-driven/><!--配置文件上傳處理器(固定寫法)public static final String MULTIPART_RESOLVER_BEAN_NAME = "multipartResolver";id="multipartResolver"這個id不能隨意的更改,因為在DispatcherServlet中規定了的--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 配置上傳文件的大小--><property name="maxUploadSize" value="1024000000"/></bean></beans>表單提交注意事項
/* 前端form表單,注意事項,要以POST提交,enctype="multipart/form-data必須要添加<form action="/fileupload" method="post" enctype="multipart/form-data"><%--文件上傳表單的name屬性值一定要與controller處理器中方法的參數對應,否則無法實現文件上傳--%>上傳LOGO:<input type="file" name="file"/><br/>上傳照片:<input type="file" name="file1"/><br/>上傳任意文件:<input type="file" name="file2"/><br/><input type="submit" value="上傳"/> </form>*/controller中的代碼
package com.fs.springmvc.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.util.UUID;/* SpringMVC文件上傳*/ @Controller public class FileUploadController {@RequestMapping(value = "/fileupload")//參數中定義MultipartFile參數,用于接收頁面提交的type=file類型的表單,要求表單名稱與參數名相同public String fileupload(MultipartFile file,MultipartFile file1,MultipartFile file2, HttpServletRequest request) throws IOException { // MultipartFile參數中封裝了上傳的文件的相關信息 // System.out.println(file.getSize());//文件的大小字節單位 // System.out.println(file.getBytes().length);//保存的字節數組,也是文件大小 // System.out.println(file.getContentType());//獲取上傳文件的類型 // System.out.println(file.getName());//是表單提交的name與參數的file,file1,file2 // System.out.println(file.getOriginalFilename());//上傳文件名,獲取原始上傳的文件名,可以作為當前文件的真實名稱保存到數據庫中備用 // System.out.println(file.isEmpty());//判斷文件大小是否是空文件//首先判斷是否是空文件,也就是存儲空間占用為0的文件if(!file.isEmpty()){//如果大小在范圍要求內正常處理,否則拋出自定義異常告知用戶(未實現)//設置保存的路徑String realPath = request.getServletContext().getRealPath("/images");//保存文件的方法,指定保存的位置和文件名即可,通常文件名使用隨機生成策略產生(我使用UUID),避免文件名沖突問題file.transferTo(new File(realPath,UUID.randomUUID().toString()+file.getOriginalFilename() ));}//測試一次性上傳多個文件if(!file1.isEmpty()){//可以根據需要,對不同種類的文件做不同的存儲路徑的區分,修改對應的保存位置即可String realPath = request.getServletContext().getRealPath("/images");file1.transferTo(new File(realPath,UUID.randomUUID().toString()+file1.getOriginalFilename()));}if(!file2.isEmpty()){String realPath = request.getServletContext().getRealPath("/images");file2.transferTo(new File(realPath,UUID.randomUUID().toString()+file2.getOriginalFilename()));}return "page.jsp";} }Restful風格
注解
? Restful ◆ @RestController ◆ @PathVariable ◆ @GetMapping ◆ @PostMapping ◆ @PutMapping ◆ @DeleteMapping總結
以上是生活随笔為你收集整理的springMVC获取异步请求的参数,返回异步请求数据(json),跨域访问简单了解,文件上传,与Restful风格的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringMVC响应的方式,无数据跳转
- 下一篇: SpringMVC自定义拦截器与异常处理