@RequestParam注解使用

hl.wang

发布于 2018.11.04 14:32 阅读 2456 评论 0

发现问题:

在使用ssm项目接收前端传入的数据的时候常常会用到@RequestParam,那么这个注解是必须使用的吗?不使用会怎样?

案例分析

看黑马视频的时候发现他们接收前端的数据并没有使用@RequestParam这个注解,依然得到了前端的数据,因此自己去试验了一下这个注解到底如何使用

案例演示

@RequestMapping("/Login1")
public String getMain( HttpSession session,  String username, String password) {
    System.out.println("username:"+username);
    System.out.println("password:"+password);
    List<InsertMember> list = work.receiveInsert();
    for (InsertMember s : list) {
        if (s.getUsername().equals(username) && s.getPassword().equals(password)) {
            session.setAttribute("username", username);
            return "Main";
        } else {
            return "fail";
        }
    }
    return "fail";
}

我们发现控制台打印出来了username和password说明我们不用@RequestParam注解依然获取到了前端的数据,那么这个注解到底有什么作用呢?我们继续看:

@RequestMapping("/Login1")
    public String getMain( HttpSession session,  String user, String password) {
        System.out.println("username:"+user);
        System.out.println("password:"+password);
        List<InsertMember> list = work.receiveInsert();
        for (InsertMember s : list) {
            if (s.getUsername().equals(user) && s.getPassword().equals(password)) {
                session.setAttribute("username", user);
                return "Main";
            } else {
                return "fail";
            }
        }
    return "fail";
}

 

此时我们把接收参数中的username换成了name,我们发现接收不到前端的数据了,那应该怎么办呢,我们继续往下看:

@RequestMapping("/Login1")
    public String getMain( HttpSession session, @RequestParam(name = "username") String user, String password) {
        System.out.println("username:"+user);
        System.out.println("password:"+password);
        List<InsertMember> list = work.receiveInsert();
        for (InsertMember s : list) {
            if (s.getUsername().equals(user) && s.getPassword().equals(password)) {
                session.setAttribute("username", user);
                return "Main";
            } else {
                return "fail";
            }
        }
    return "fail";
}

 

好神奇啊我们发现当给@RequestParam这个注解加了(name = "username")之后,我们又能获得到前端传入的数据了是不是很神奇,现在我想你们应该明白什么了,同样换成(value= "username")也可以接收到前端传入的数据。接下来我们来看一下这个注解另一个用法:

@RequestMapping("/Login1")
    public String getMain( HttpSession session, @RequestParam(name = "username") String user, String password,@RequestParam(defaultValue = "1") String demo) {
        System.out.println("username:"+user);
        System.out.println("password:"+password);
        System.out.println("demo:"+demo);
        List<InsertMember> list = work.receiveInsert();
        for (InsertMember s : list) {
            if (s.getUsername().equals(user) && s.getPassword().equals(password)) {
                session.setAttribute("username", user);
                return "Main";
            } else {
                return "fail";
            }
        }
    return "fail";
}

 

 我们并没有给demo传值,但是依然输出了一个1这是为什么呢?这是因为我们在用@RequestParam注解接收demo的时候加了(defaultValue = "1"),这样如果前端没有给demo传值会有一个给他一个我们定义的默认赋值。如果不加(defaultValue = "1"),前端如果不传值demo则为null。

小结

最后,总结一下吧,如果接收前端的值前端接收时所定义的变量名与前端传入变量的name所定义的名字一样的时候,不需要用 @RequestParam注解来接收,如果我们所定义的变量名玉前端传入变量的name所定义的名字不一样是我们需要通过@RequestParam(name = "username") String user 或者@RequestParam(value = "username") String user ,这种形式将前端变量的name为username的值传给我们定义的user。最后@RequestParam(defaultValue = "1") String demo,这样如果前端没有传一个demo值的话,demo就不是null而是我们定义的给他的默认值1。