上传文件 @RequestPart
@RestController @RequestMapping("/user") public class UserController { @RequestMapping("/upload") //myfile 是接收的参数名, 赋值给 file public String upload(@RequestPart("myfile") MultipartFile file) throws IOException { String path = "E:\\image\\img.png"; //保存文件 file.transferTo(new File(path)); return path; } }
该路径下确实保存了 img.png 图片
上面的代码写法是有问题的, 如果有很多用户都要保存文件, 那文件名就不能写死了, 必须保证每次保存的文件名都不一样, 可以使用 UUID :
@RestController @RequestMapping("/user") public class UserController { @RequestMapping("/upload") public String upload(@RequestPart("myfile") MultipartFile file) throws IOException { //得到 UUID 并去掉 "-" String name = UUID.randomUUID().toString().replace("-",""); //file.getOriginalFilename() 得到文件名 //file.getOriginalFilename().lastIndexOf(".") 得到最后一个"."的下标 //整个就是 name 拼接上 .后缀名 name += file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); String path = "E:\\image\\" + name; //保存文件 file.transferTo(new File(path)); return path; } }
多次提交得到的文件 :
获取 Cookie/Session/Header
- 获取 Cookie
@RestController @RequestMapping("/user") public class UserController { @RequestMapping("/get_cookie") public String getCookie(@CookieValue(value = "myCookie", required = false) String ck) { return ck; } }
没有输出 :
通过前端构建一个 key 为 myCookie 的 cookie :
- 获取 Session
要想获取 Session 首先要有 Session, 我们可以上传一个 Session :
@RestController @RequestMapping("/user") public class UserController { @RequestMapping("/set_session") public String setSession(HttpServletRequest request) { HttpSession session = request.getSession(); if(session != null) { session.setAttribute("SESSION_KEY","张三"); return "session set success"; } return "session set fail"; } @RequestMapping("/get_session") public String getSession(@SessionAttribute(required = false, value = "SESSION_KEY") String name) { return name; } }
3. 获取 Header
@RestController @RequestMapping("/user") public class UserController { @RequestMapping("/get_header") public String getHeader(@RequestHeader("User-Agent") String userAgent) { return "UserAgent : " + userAgent; } }
可以通过 fiddler 来抓包验证一下 :
3. 返回数据
默认请求下⽆论是 Spring MVC 或者是 Spring Boot 返回的都是 html 格式,如果需要返回非 html 格式数据, 就得使用 @ResponseBody 注解了, 我们之前一直使用的 @RestController 便是 @ResponseBody + @Controller 注解.
验证返回数据的默认格式 :
@Controller public class Test { @RequestMapping("/b") public String t() { return "hello.html"; } }
因为没有这个前端页面, 所以返回出错 :
抓包(返回的是 html 格式) :
在静态文件中加入 hello.html 文件 :
再次访问 :
使用 @ResponseBody 返回字符串 :
@Controller public class Test { @ResponseBody @RequestMapping("/a") public String t2() { return "hello.html"; } }
或者使用 @RestController 也可以.