SpringMVC请求参数

本文详细讲解了如何在Spring MVC中通过GET/POST方式传递参数,包括普通类型、数组与集合、POJO的处理,以及如何使用@RequestParam解决参数映射问题。涵盖数组数组、集合、结构化对象的参数解析技巧。
摘要由CSDN通过智能技术生成

1、请求控制

1.1 普通类型参数传递

GET/POST方式提交

  • 参数名与Controller对应方法名的形参保持一致

    访问的URL:http://localhost:8080/dome5/save2?username=zhang&age=10

        @RequestMapping("/save2")
        public String save2(String username,int age){
            System.out.println("dome mvc controller running ....");
            System.out.println("username="+username);
            System.out.println("age="+age);
            return "success.jsp";
        }
    
  • 当参数名与Controller对应方法名的形参不一致

    使用**@RequestParam**

    • @RequestParam 定义在处理器方法的参数名前
    • 绑定请求参数与请求方法的形参的映射
        @RequestMapping("/save3")
        public String save3(
                @RequestParam(
                        name = "name",
                        defaultValue = "yue",
                        required = false
                ) String username,
                @RequestParam(
                        name = "a",
                        defaultValue = "5"
                ) int age){
            System.out.println("dome mvc controller running ....");
            System.out.println("username="+username);
            System.out.println("age="+age);
            return "success.jsp";
        }
    

1.2 数组与集合类型的参数传递

1.2.1 数组类型参数

  • 提交多个参数,多个参数的参数名相同,值不同

  • 提交的参数名须要与数组形参名相同

    访问URL格式:(http://localhost:8080/dome5/save5?username=zhang&username=wang)

        @RequestMapping("/save4")
    //    @RequestParam(name = "username") 是非必须的,当参数名相同,可以省略
        public String save4(@RequestParam(name = "username") String[] username){
            System.out.println("dome4 mvc controller running ....");
            System.out.println("username="+username[0]+"  "+username[1]);
            return "success.jsp";
        }
    

1.2.2 集合类型参数

  • 提交多个参数,多个参数的参数名相同,值不同

  • 对于集合参数的使用,必须使用 @RequestParam 进行映射配置,否则不能将数据正确的装配

  • SpringMVC在装配集合对象时,是先创建对象,再进行赋值,因此形参必须是有构造参数的类,不能是接口

    URL格式: http://localhost/requestParam10?nick=Jockme&nick=zahc

        @RequestMapping("/save5")
    //    @RequestParam(name = "username")是必须的
        public String save5( @RequestParam(name = "username") ArrayList<String> username){
            System.out.println("dome5 mvc controller running ....");
            System.out.println("username="+username);
            return "success.jsp";
        }
    

1.3 POJO类型参数传递

  • 对于结构较复杂的数据,可以使用POJO类进行参数传递

1.3.1 POJO简单数据类型

  • POJO的属性名要与提交的参数名称保持一致

    URL:(http://localhost:8080/dome5/save6?username=zhang&age=12)

    @RequestMapping("/save6")
    public String save6(User user){
        System.out.println("dome6 mvc controller running ....");
        System.out.println("username="+user.getUsername());
        System.out.println("age="+user.getAge());
        return "success.jsp";
    }
public class User {
    private String username;
    private Integer age;

    private HashMap<String,String> hashMap;
    private ArrayList<String> arrayList;
    
    private Account account;
}
  • 参数名冲突:

    • 当POJO的属性名与其它形参参数名冲突时,将同时被赋值
    • 建议使用@RequestParam注解进行区分
    @RequestMapping("/save6")
        public String save6(User user,String age){
            System.out.println("dome6 mvc controller running ....");
            return "success.jsp";
        }
    

1.3.2 POJO包含对象属性

  • 参数的层次结构要与POJO属性的层次结构保持一致

URL格式:(http://localhost:8080/dome5/save8?account.userId=12345&account.password=zhang)

    @RequestMapping("/save8")
    public String save8(User user){
        System.out.println("dome8 mvc controller running ....");
        System.out.println("user="+user);
        return "success.jsp";
    }
public class Account {
    private String userId;
    private String password;
}

1.3.3 POJO包含集合属性

  • 当POJO中出现List,保存对象数据,参数名称与对象层次结构名称保持一致

  • 使用数组格式描述集合中对象的位置

  • URL格式:(http://localhost:8080/dome5/save8?accounts[0].userId=12345&accounts[0].password=zhang)

    public class User {
        private String username;
        private Integer age;
      
        private ArrayList<Account> accounts;
    }
    
  • 当POJO中出现Map,与List类似的处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值