设计网站的关键点,三维家装设计软件,网站海外推广外包,免费中文网站模板htmlspringmvc——一 站式web框架#xff0c;核心是处理http请求响应。 前后端分离#xff1a;需要序列化#xff0c;服务端把数据序列化成字符串或者流给前端#xff0c;前端又把json转成对象#xff0c;前端的叫反序列化。前端把数据序列化转成字符串给服务器#xff0c;服… springmvc——一 站式web框架核心是处理http请求响应。 前后端分离需要序列化服务端把数据序列化成字符串或者流给前端前端又把json转成对象前端的叫反序列化。前端把数据序列化转成字符串给服务器服务器收到字符串转成对象。转化为json字符串进行网络传输 序列化对象转字符串 反序列化字符串转对象 RequestMapping路径映射 路径位置通配符多个都能匹配上就精确优先 * 匹配任意多个字符0-n不能匹配多个路径——使用/**解决 ** 匹配任意多层路径 ? 匹配任意一个字符 精确程度完全匹配——?——*——** 精确路径必须全局唯一 /*** //RestController处理请求和响应数据——Controller、ResponseBody* ResponseBody告诉spring把返回的内容写到响应体中每次请求进来执行目标方法*/
RestController
public class HelloController {* return*/RequestMapping(/hello)public String hello(){return Hello spring MVC 你好;}}请求限定 请求方式method 请求参数params 请求头headers 请求内容类型consumes 响应内容类型produces RestController
public class HelloController {/*** 限定请求方式-接收post请求* GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS,TRACE;*/RequestMapping(value /test01,method RequestMethod.POST)public String test01(){return Hello spring MVC 你好;}/***限定请求参数-接收参数请求* name:表示必须包含nameusername参数 http://localhost:8080/test02?nameusername*/RequestMapping(value /test02,params { nameusername})public String test02(){return Hello spring MVC 你好;}/*** 限定请求头-接收请求头请求* accept:表示必须包含请求头Accept* return*/RequestMapping(value /test03,headers {Accept})public String test03(){return Hello spring MVC test03;}/*** 请求内容类型-接收请求内容类型请求* application/json表示浏览器必须携带json格式数据。*/RequestMapping(value /test04,consumes {application/json})public String test04(){return Hello spring MVC test04;}/*** 响应内容类型* text/html;charsetUTF-8生产html页面* return*/RequestMapping(value /test05,produces {text/html;charsetUTF-8})public String test05(){return h1hello/h1;}
}
请求处理 ~使用普通变量收集请求参数 ~使用RequestParam ~使用POJO统一封装多个参数 ~CookieValue获取Cookie数据 ~使用POJO级联封装复杂对象 ~使用RequestBody封装JSON对象 ~使用RequestPart/RequestParam封装文件对象 使用普通变量收集请求参数 /***请求参数-使用普通变量* 要求变量名和参数名保持一致*/RequestMapping(/handle01)public String handle01(String username, String password) {System.out.println(usernameusername,password:password);return success;}
使用RequestParam RequestParam():取出某个请求参数的值请求参数可以和变量名不一致。 /*** 默认一定要携带的参数否则报错* required false:可以不携带//默认为true* defaultValue:默认值,参数可以不带* 无论请求参数是来自请求体还是url?后面都可以取到请求参数* return*/RequestMapping(/handle02)public String handle02(RequestParam(username) String name,RequestParam(value password, defaultValue 123456)String pwd,RequestParam(phone)String phone,RequestParam(valueagreement,required false)boolean agree) {System.out.println(usernamename,password:pwd,cellphone:phone,agreement:agree);return success;}
PathVariable-路径变量 /*** PathVariable路径变量标识-取路径id的值* param id* return*/RequestMapping(/handle/{id}) //{id}路径变量动态的public String handle08(PathVariable Integer id) {System.out.println(id:id);return success;} 使用POJO统一封装多个参数
/***请求参数-pojo统一封装参数* 自动把请求参数和pojo属性进行匹配* 效果pojo的所有属性值都来自请求参数* return*/RequestMapping(/handle03)public String handle03(Person person) {System.out.println(person);return success;}
使用POJO级联封装复杂对象
/***使用pojo级联封装复杂属性* 属性套属性对象套对象* 例如①address属性中有三个属性可以把address当成对象。* ②前端传过来的属性能选多个可以封装成数组。* Data* public class Person {* private String username;* private Address address;* private String[] hobby;* }* Data* class Address{* private String province;* private String city;* }* return*/RequestMapping(/handle06)public String handle05(Person person) {System.out.println(person);return success;}
使用RequestBody封装JSON对象 /*** 接受json数据* RequestBody 获取请求体的json数据自动转为person对象反序列化* 发出请求体是json字符串不是keyvalue* return*/RequestMapping(/handle07)public String handle06(RequestBody Person person) {System.out.println(person);return success;}
使用MultipartFile封装文件对象 /***例前端发送表单数据表单包含数据和头像图片和生活照图片* 接受文件上传* RequestParam取出文件项前端参数名称封装到MultipartFile就可以拿到文件内容* param person* return*/RequestMapping(/handle08)public String handle07(Person person, RequestParam(headerImage) MultipartFile headerImgFile,RequestParam(lifeImage) MultipartFile[] lifeImgFiles) throws IOException {//1、获取原始文件名String originalFilename headerImgFile.getOriginalFilename();//2、文件保存headerImgFile.transferTo(new File(E:\\img\\ originalFilename));
// 以上处理了头像下面处理多个生活照if (lifeImgFiles.length 0) {for (MultipartFile imgFile : lifeImgFiles) {imgFile.transferTo(new File(E:\\img\\ imgFile.getOriginalFilename()));}System.out.println(生活照保存结束);}System.out.println(person);//文件大小long size headerImgFile.getSize();//获取文件流InputStream inputStream headerImgFile.getInputStream();return success;}
响应处理 1.ResponseBody对象响应json等非页面数据 2.ResponseEntityB 响应头、响应体数据文件下载 RestController
public class ResponseTestController {/*** 会自动返回的对象转为json* return*/RequestMapping(/resp01)public Person resp01() {Person person new Person();return person;}/*** 文件下载* HttpEntity拿到整个请求数据* ResponseEntity拿到整个响应数据响应头响应体状态码* 可以用作文件下载模板-只需要修改文件下载位置和文件名即可。* return*/RequestMapping(/download)public ResponseEntityInputStreamResource download() throws Exception {FileInputStream fileInputStream new FileInputStream(E:\\photo.png);// 一口气读会溢出 所以使用分段读- InputStreamResource
// byte[] bytes fileInputStream.readAllBytes();// 文件名中文乱码-解决乱码问题String encode URLEncoder.encode(1.jpg, UTF-8);
// 解决文件太大会内存溢出问题InputStreamResource resource new InputStreamResource(fileInputStream);return ResponseEntity.ok()
// 内容类型流.contentType(MediaType.APPLICATION_OCTET_STREAM)
// 内容大小.contentLength(fileInputStream.available())
// Content-Disposition内容处理方式.header(Content-Disposition,attachment;filenameencode).body(resource);}
}日期处理 数据转换 反序列化前端提交的日期字符串——日期对象 序列化日期对象——日期字符串 默认的日期格式xxxx-xx-05T06:46:58.00000:00 解决方法使用JsonFormat注解json转对象对象转json JsonFormat(pattern yyyy-MM-dd HH:mm:ss,timezone GMT8)private Date birthday;