1_Spring MVC 接参与返参方式

接参方式

(1)使用 HttpServletRequest

前端传什么参数,就接什么参数

@RequestMapping(value = "/test")
public String test2(HttpServletRequest request){
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    return "success";
}

(2)使用 Spring

正常情况:

页面传值时的 key = 处理请求的方法的参数名

@RequestMapping(value = "/test")
public String test3(String username,String password){
    System.out.println(username);
    System.out.println(password);
    return "success";
}

情况一: 当页面传入的参数名与使用的名字不一样时(类型一致)

使用 @RequestParam(name = “属性名”) 进行绑定

@RequestMapping(value = "/test")
public String test5(@RequestParam(name = "username") String name, String password){
    System.out.println(name);
    System.out.println(password);
    return "success";
}

情况二: 当传入参数类型不匹配(名字不同)或者没有传入时(设置默认值)

@RequestParam(defaultValue = “默认值”)

@RequestMapping(value = "/test")
public String test6(String username, @RequestParam(defaultValue = "333")Integer password){
    System.out.println(username);
    System.out.println(password);
    return "success";
}

(3)使用控件

使用控件名与对象属性一致的方式

//控件类:
public class User {
    private String username;
    private String password;
    ....
}

//controller类
@RequestMapping(value = "/test")
public String test4(User user){
    System.out.println(user.getUsername());
    System.out.println(user.getPassword());
    return "success";
}

解决时间格式问题:

(1)Spring MVC 框架默支持转换得日期格式: yyyy/MM/dd

可以正常转换:

//前端传入参数格式:2020/1/1

@RequestMapping("/test3")
public ModelAndView test8(Date birthday){
    System.out.println(birthday);
    return mv;
}

(2)使用 SimpleDataFormate 转换

​ 使用 string 接受日期后,再转换: SimpleDataFormate

(3)使用工具类DateTimeFormat处理日期

步骤1:添加依赖

<dependency> 
    <groupId>joda-time</groupId> 
    <artifactId>joda-time</artifactId>
    <version>2.9.9</version>
</dependency>

步骤2:修改配置文件

xmlns:mvc="http://www.springframework.org/schema/mvc"
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
配置文件:<mvc:annotation-driven/>

步骤3:测试

//时间类型转换:使用@DateTimeFormat(pattern = "yyyy-MM-dd")方式
@RequestMapping("/test2")
public String test7(@DateTimeFormat(pattern = "yyyy-MM-dd") Date birthday, HttpServletRequest request, ModelMap map, Model model){
    System.out.println(birthday);
    return "success";
}

注意点: 参数类型使用引用数据类型,基本数据类型使用包装类


返参方式

(1)使用 HttpServletRequest

request 存值转发时有效,重定向时丢失

@RequestMapping("/test2")
public String test7(Date birthday, HttpServletRequest request){
    request.setAttribute("birthday",birthday);
    return "success";
}

(2)使用 ModelMap map

默认作用域 request

@RequestMapping("/test2")
public String test7(Date birthday,ModelMap map){

    map.addAttribute("mapKey",birthday);
    return "success";
}

(3)使用 Model

@RequestMapping("/test2")
public String test7( Date birthday,Model model){

    model.addAttribute("modelKey",birthday);
    return "success";
}

(4)使用 ModelAndView

ModelAndView 对象需要new,同时作为 返回值 类型

@RequestMapping("/test3")
public ModelAndView test8(Date birthday){

    //1.new ModelAndView对象
    ModelAndView mv = new ModelAndView();
    //2.存值
    mv.setViewName("success");//跳转页面名字
    mv.addObject("viewKey",birthday);
    //3.返回
    return mv;
}
上一篇:2020-12-16


下一篇:MySQL的索引