目录

SpringMVC

什么是SpringMVC

MVC概念

Spring MVC 创建和连接

转发vs重定向

获取参数

1.基础数据类型/包装类型(无注解)

添加@RequestParam注解

2.自定义对象(无注解)

3.form-data格式的文件上次

4.使用自定义类型接收json数据=》@RequestBody注解

5.获取URL中参数@PathVariable

如果方法参数的变量名需要和关联的字段不一样=》@RequestParam

6.获取 Request 和 Response 对象

7.获取请求头,Session

@RequestHeader:获取请求头某个字段的值

@CookieValue:接收请求头Cookie中的某个字段的值

返回响应

1.返回网页

2.返回text

3.返回json

组合注解:


什么是SpringMVC

1.Spring MVC 是一个 Web 框架。

2.Spring MVC 是基于 Servlet API 构建的

MVC概念

MVC 是 Model View Controller 的缩写

 

springmvc参数数据过大报400 springmvc 参数解析_java

Controller:控制器,用于处理请求和响应

Model:模型对象,对应请求数据和响应数据转换的对象

View:视图,返回给前端使用的

Spring MVC 创建和连接

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这个网页了。

转发vs重定向

转发:一次请求去,返回去其他路径的结果,路径不变。返回网页默认就是转发

重定向:两次请求。第一次返回301/302/307重定向状态码+Location重定向的地址。第二次浏览器自动发送location路径的请求。路径改

变其。

获取参数

1.基础数据类型/包装类型(无注解)

@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。

注意:如果是基础数据类型,请求数据就必须有这个字段。前端字段的类型,要和后端字段类型一致,否则也会报错

添加@RequestParam注解

=>使用在方法参数上。默认表示请求必须包含该字段

springmvc参数数据过大报400 springmvc 参数解析_java_02

2.自定义对象(无注解)

方法同1.基础数据类型/包装类型

3.form-data格式的文件上次

//接收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请求

4.使用自定义类型接收json数据=》@RequestBody注解

//接收json格式的数据:@RequestBody
@RequestMapping("/json")
public String json(@RequestBody User user){
    log.debug("user对象接收的数据:{}", user);
    return "Done";
}

5.获取URL中参数@PathVariable

springmvc参数数据过大报400 springmvc 参数解析_java_03

如果方法参数的变量名需要和关联的字段不一样=》@RequestParam

springmvc参数数据过大报400 springmvc 参数解析_java_04

6.获取 Request 和 Response 对象

@RequestMapping("/param10") 
public String param10(HttpServletResponse response, HttpServletRequest request) {     
    String name = request.getParameter("name");
     //获取所有 cookie 信息 
    Cookie[] cookies = request.getCookies(); 
    return name + " 你好.";
}

7.获取请求头,Session

@RequestHeader:获取请求头某个字段的值

@RequestMapping("/header")
public String header(@RequestHeader("Accept-Encoding") String encoding){
    log.debug("获取到的Header字段:{}", encoding);
        return "Done";
}

@CookieValue:接收请求头Cookie中的某个字段的值

@RequestMapping("/cookie")
public String cookie(@CookieValue("yyy") String xxx){
    log.debug("获取到的Cookie字段:{}", xxx);
    return "孔子说:中午不睡觉,下午嗷嗷叫;孟子说:孔子说的对";
}

返回响应

1.返回网页

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";
    }
}

2.返回text

加@ResponseBody

@RequestMapping("/m7")
@ResponseBody
public String method_7() {
    return "Hello";
}

3.返回json

//返回json字符串:@ResponseBody,且方法的返回值为List,Map,自定义类型即可
    @RequestMapping("/response")
    @ResponseBody
    public Object response(){
        Map<String, Object> 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等等