【SpringMVC】(五)数据处理方式

数据处理方式


(一)接收前端提交数据

1.提交的是参数

1.1 提交的域名称和处理方法的参数名一致

  • 1.Controller

    @Controller
    @RequestMapping("/user")
    public class ReceiveDataController {
    
        @GetMapping("/t1")
        public String test1(String name, Model model) {
            //1. 接受前端参数
            System.out.println("接受到前端的参数为:" + name);
    
            //2. 将返回的结果传递给前端
            model.addAttribute("msg", name);
    
            //3. 视图跳转
            return "test";
        }
    }
    
  • 2.url

    http://localhost:8080/user/t1?name=zkk
    


1.2 提交的域名称和处理方法的参数名不一致

  • 需要传参加上@RequestParam("xxx")。一般都加上,这样传参错误时,报错提示针对性更强(见下)。

  • 1.Controller

    @Controller
    @RequestMapping("/user")
    public class ReceiveDataController {
    
        @GetMapping("/t2")
        public String test2(@RequestParam("username") String name, Model model) {
            System.out.println("接受到前端的参数为:" + name);
            model.addAttribute("msg", name);
            return "test";
        }
    }
    
  • 2.错误url

    http://localhost:8080/user/t2?name=zkk
    

    报错

  • 3.url

    http://localhost:8080/user/t2?username=zkk
    

2.提交的是一个对象

  • 这种方式要求,前端传递的参数名和对象的属性名必须一致,否则传参为null。

  • 1.添加lombok依赖

  • 2.User

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        private int id;
        private String name;
        private int age;
    }
    
  • 3.Controller

    @Controller
    @RequestMapping("/user")
    public class ReceiveDataController {
    
        @GetMapping("/t3")
        public String test3(User user) {
            System.out.println(user);
            return "test";
        }
    }
    
  • 4.url

    http://localhost:8080/user/t3?id=1&name=zkk&age=19
    
  • 控制台打印

    User(id=1, name=zkk, age=19)
    

(二)数据显示到前端

1.通过ModelAndView

只有控制器实现接口时,才用ModelAndView

public class ControllerTest implements Controller {

	public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
		//返回一个模型视图对象
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","ControllerTest");
        mv.setViewName("test");
        return mv;
	}
}

2.通过ModelMap

@RequestMapping("/hello")
public String hello(@RequestParam("username") String name,ModelMap map){
	//封装要显示到视图中的数据
    //相当于req.setAttribute("name",name);    
    model.addAttribute("name",name);
    return "hello";
}

3.通过Model

@RequestMapping("/ct2/hello")
public String hello(@RequestParam("username") String name,Model model){
	//封装要显示到视图中的数据
    //相当于req.setAttribute("name",name);
    model.addAttribute("msg",name);
    return "test";
}

*三者对比

Model:只有几个方法,只适用于储存数据,简化了对Model对象的操作与理解;

ModelMap:继承了LinkedMap,除了自身的一些方法,同样继承了LinkedMap的方法和特性;

ModelAndView:可以储存数据,可以设置返回的逻辑视图,进行控制展示层的跳转。
posted @ 2021-02-12 16:40  musecho  阅读(111)  评论(0)    收藏  举报