目录
4.使用自定义类型接收json数据=》@RequestBody注解
如果方法参数的变量名需要和关联的字段不一样=》@RequestParam
@CookieValue:接收请求头Cookie中的某个字段的值
1.Spring MVC 是一个 Web 框架。
2.Spring MVC 是基于 Servlet API 构建的
MVC 是 Model View Controller 的缩写
Controller:控制器,用于处理请求和响应
Model:模型对象,对应请求数据和响应数据转换的对象
View:视图,返回给前端使用的
Spring MVC 项目创建和 Spring Boot 创建项目相同(Spring MVC 使用 Spring Boot 的方式创建),在创建的时候选择 Spring Web 就相
当于创建了 Spring MVC 的项目。
在 Spring MVC 中使用 @RequestMapping 来实现 URL 路由映射。
- //表示当前类是web控制器,处理请求响应
- @Controller
- //类/方法注解:表示服务资源的信息(路径,请求方法等等)
- @RequestMapping("/user")
- public class UserController {
- //返回值(字符串)是网页的路径,此时,会真正的返回对应网页的内容
- @RequestMapping("/login")
- public String login(){
- return "/index.html";
- //转发
- // return "forward:/index.html";
- //重定向
- // return "redirect:/index.html";
- }
这样实现之后,当访问地址:http://localhost:8080/user/login 时就能访问index.html这个网页了。
转发:一次请求去,返回去其他路径的结果,路径不变。返回网页默认就是转发
重定向:两次请求。第一次返回301/302/307重定向状态码+Location重定向的地址。第二次浏览器自动发送location路径的请求。路径改
变其。
- @RequestMapping("/type1")
- public String 简单类型and没有注解(String username,String password,Integer age){
- log.debug("username={}, password={}, age={}", username, password, age);
- return "Done";
- }
这样方法可以获取queryString,表单格式,from-data(不能是文件)。不可以获取json格式。
若变量名与请求数据不一致或者没有,就接收到的是null。
注意:如果是基础数据类型,请求数据就必须有这个字段。前端字段的类型,要和后端字段类型一致,否则也会报错
=>使用在方法参数上。默认表示请求必须包含该字段
方法同1.基础数据类型/包装类型
//接收form-data上传的文件:请求是form-data格式,包含head字段的文件 @RequestMapping("/upload") public String 对象(MultipartFile head){ log.debug("接收的上传文件名称:{}", head.getOriginalFilename()); return "Done"; } @RequestMapping("/upload2") public String 上传文件2(@RequestParam MultipartFile head){ log.debug("接收的上传文件名称:{}", head.getOriginalFilename()); return "Done"; } @RequestMapping("/upload3") public String 上传文件3(@RequestPart MultipartFile head){ log.debug("接收的上传文件名称:{}", head.getOriginalFilename()); return "Done"; }
@RequestPart
@RequestPart这个注解用在multipart/form-data表单提交请求的方法上。
支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的
@RequestParam
@RequestParam支持’application/json’,也同样支持multipart/form-data请求
- //接收json格式的数据:@RequestBody
- @RequestMapping("/json")
- public String json(@RequestBody User user){
- log.debug("user对象接收的数据:{}", user);
- return "Done";
- }
- @RequestMapping("/param10")
- public String param10(HttpServletResponse response, HttpServletRequest request) {
- String name = request.getParameter("name");
- //获取所有 cookie 信息
- Cookie[] cookies = request.getCookies();
- return name + " 你好.";
- }
- @RequestMapping("/header")
- public String header(@RequestHeader("Accept-Encoding") String encoding){
- log.debug("获取到的Header字段:{}", encoding);
- return "Done";
- }
@RequestMapping("/cookie") public String cookie(@CookieValue("yyy") String xxx){ log.debug("获取到的Cookie字段:{}", xxx); return "孔子说:中午不睡觉,下午嗷嗷叫;孟子说:孔子说的对"; }
- import com.example.demo.model.Person;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- @Controller
- @RequestMapping("/p")
- public class PersonController {
- @RequestMapping("/index")
- public Object index(){
- // 执行业务...
- // 返回view -> index.html
- return "/index.html";
- }
- }
加@ResponseBody
- @RequestMapping("/m7")
- @ResponseBody
- public String method_7() {
- return "Hello";
- }
- //返回json字符串:@ResponseBody,且方法的返回值为List,Map,自定义类型即可
- @RequestMapping("/response")
- @ResponseBody
- public Object response(){
- Map
map = new HashMap<>(); - map.put("username", "张三");
- map.put("nickname", "小张");
- return map;
- }
- }
@RestController:类注解,等同于@Controller+@ResponseBody
@GetMapping:方法注解,等同于@RequestMapping(method=RequestMethod.GET)
只提供get服务方法
@PostMapping:方法注解,等同于@RequestMapping(method=RequestMethod.POST)
只提供post服务方法
补充:@RequestMapping提供所有的服务方法get,post,put等等