• 【SpringMVC】SpringMVC接受请求参数和数据回显


    一、接受前端的请求参数

    1.接受的是一个或多个参数时

    @Controller
    @RequestMapping("/user")
    public class UserController {
    
        @GetMapping("/t1")
        public String test1(String name, Model model){
            System.out.println("从前端接受到的参数为:"+name);
            model.addAttribute("msg",name);
            return "test";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述
    可是这样子写的话,如果前端没有携带参数,就会返回空值。如果前端传的不是一个name呢?我们该怎么处理?

    @Controller
    @RequestMapping("/user")
    public class UserController {
    
        @GetMapping("/t1")
        public String test1(@RequestParam("username") String name, Model model){
            System.out.println("从前端接受到的参数为:"+name);
            model.addAttribute("msg",name);
            return "test";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    @RequestParam(“username”)会强制你请求携带的参数必须是username。如果你的参数还是name或者其他(包括不携带参数),必定会报400错误(错误的请求),它告诉你请求是畸形的。
    在这里插入图片描述
    @RequestParam注解保证了前端的参数,在后端能明显的区分出来,从而保证了前后端传参的一致性。(通俗的讲,其实就是@RequestParam的优点:前端参数无论怎么改变,不需要改变后端的参数,只要有@RequestParam,它携带的参数一定就是前端最新的参数。)

    2.接受的是一个对象时

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        String name;
        int age;
        String sex;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    @Controller
    @RequestMapping("/user")
    public class UserController {
    	@GetMapping("/t2")
        public String test2(User user, Model model) {
            model.addAttribute("msg", user);
            System.out.println(user);
            return "test";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    需要保证url请求的参数名和对象的属性名一致。确保这些请求的参数可以与对象中的属性一一匹配。如果两者不一致的,则后端获取的对象中的相应属性就会被赋值为null。

    二、数据回显到前端

    前面说了如何获取前端请求的参数,接收一个参数或者多个参数,或是接收一个对象参数。
    下面讨论如何把这些参数回显到前端,除了我们常用的model.addAttribute方法。

    1.modelAndView

    modelAndView通常用于只是实现了Controller接口的controller类。

    public class HelloController implements Controller {
        @Override
        public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
            ModelAndView modelAndView = new ModelAndView();
            modelAndView.addObject("msg","HelloSpringMVC!");
            modelAndView.setViewName("hello");
            return modelAndView;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    处理器适配器给前端控制器DispatcherServlet返回一个modelAndView视图解析器从DispatcherServlet获取到modelAndView,对其进行视图解析,返回相应的视图给DispatcherServlet。

    缺点:因为每一个处理器只能有一个实现方法,因此一个处理器只能返回一个modelAndView对象。所以每来一个视图,就需要创建很多个controller类。

    2.model

    model是SpringMVC三大组件中的处理器映射器对应的注解下,所使用的简化版模型。比如使用了RequestMapping注解下的方法,它的返回值即视图名会自动去匹配视图解析器前后缀。因此,相对于原来那种实现了Controller接口的处理器,省去了设置视图名称的步骤。并且,一个处理器类下可以通过处理器映射器来映射多个视图,而不需要像之前那样每一个视图只能对应一个处理器。

    	@GetMapping("/t2")
        public String test2(Model model) {
            model.addAttribute("msg", user);
            return "test";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.modelMap

    modelMap只是在model的基础上,它还继承了LinkedHashMap,因此它还拥有LinkedHashMap的一些特定方法和特性。用法:和model一样,只是多了一些方法。

  • 相关阅读:
    Java面试题汇总(持续更新.....)
    ActiveMQ 笔记(九)Windows部署:单机与集群部署流程
    「运维有小邓」Active Directory 密码过期通知功能
    “刷脸”看健康码的电子哨兵,一旦遭破解,让你无路可走
    【安装Pytorch】
    (三) Spring Security Oauth2.0 源码分析--认证中心全流程分析
    NDK编译构建C/CPP工程
    Java中的SPI原理浅谈
    Java+SSM+JSP实现高校学生健康档案管理系统
    豪华卧室怎么装?快来看看吧
  • 原文地址:https://blog.csdn.net/qq_53635765/article/details/126684795