Spring实现了MVC
传统的MVC
现在的Spring MVC更适合称之为Spring Web(前后端分离)
@RestController
=@ResponseBody
+@Controller
直接写就可以
会自己转换数据类型, 要是类型不匹配会错误状态码400
要是不用包装类,传了空值,会错误状态码500
这是前端传参的方法, 与接收参数的方式无关
将前端传来的n
重命名为name
@RequestParam注解默认是必传参数, 可以修改成非必传参数
使用@RequestBody
(如果发送的参数对不上, 会返回null, 不会报错)
@RequestMapping("/get4")
public String get4(@RequestBody Student student){
log.info(student.toString());
return student.toString();
}
有的网址会把有点参数单独提出来当做一个请求, 而不是作为一个参数, 例如:https://www.meituan.com/meishi/291334/
后面的数字代表一个商品id, 可以用下面的方法实现:
使用/{参数名}
和@PathVariable
这样访问的时候
就会成功
另外还可以用多层, 并且可以用别名
这个注解默认是**必传参数**
参数使用@RequestPart
注解, 并且参数类型是MultipartFile
@RequestMapping("/getFile")
public String getFile(@RequestPart MultipartFile file) throws IOException {
log.info(file.getOriginalFilename()); //显示原始名称
file.transferTo(new File("D:/Projects/Temp/"+file.getOriginalFilename()));
return "success";
}
spring:
servlet:
multipart:
max-file-size: 20MB # 设置单个文件最大大小为20MB
max-request-size: 200MB # 设置多个文件大小为200MB
@RequestMapping("/getCookie")
public String getCookie(@CookieValue String cookie){
return "cookie="+cookie;
}
该注解默认是参数不为空,
在浏览器F12界面手动添加一个cookie进行访问
可以获取到结果
也可以设置参数可为空@CookieValue(required = false)
cookie是存在本地的, 可以造假, 所以不安全
@RequestMapping("/getSession")
public String getSession(@SessionAttribute(required = false) String session){
return "session="+session;
}
该注解默认是参数不为空,也可以设置参数可为空@SessionAttribute(required = false)
@RequestMapping("/setSession")
public String setSession(HttpSession session){
session.setAttribute("session1","session2");
return "success";
}
@RequestMapping("/getHead")
public String getHead(@RequestHeader("User-Agent") String userAgent){
return "userAgent="+userAgent;
}
@RequestMapping("/getJson")
public Map<String,String> getJson(){
Map<String,String> map = new HashMap<>();
map.put("k1","v1");
map.put("k2","v2");
map.put("k3","v3");
map.put("k4","v4");
map.put("k5","v5");
return map;
}
会自动把Content-Type
改成application/json
@RequestMapping("/forward")
public String forward(){
return "forward:/index.html";
}
直接跳转到目标页面, 服务器不再管
//请求重定向
@RequestMapping("/redirect")
public String redirect(){
return "redirect:/index.html";
}
请求转发, 如果资源和转发的页面不在⼀个⽬录下,会导致外部资源不可访问.
如果请求转发的页面依赖了被转发页面的其他资源, 那么会找不到资源, 因为服务器会在当前页面目录找, 而不会在被转发的页面目录找