spring mvc 获取各种参数

一.获取请求参数

客户端获取参数格式: name=xx&age=xxx

服务端获取参数:有时候需要进行封装,而spring mvc 可以接收的参数为

1.基本数据类型

2.pojo类型参数

3.数组类型参数

4.集合类型参数

二.获取参数案例

2.1 获取基本参数

1.controller代码

    /**
    * @author   controller中业务方法的参数名要和请求参数的名称一致,参数值灰自动映射匹配
    * @description
    * @date 2021/1/10 22:09
    * @param
     * * @return void
    */

    @RequestMapping("/bike")
    @ResponseBody
    public String  bike(String name,int age){
      System.out.println("获取的参数name:"+name+" age:"+age);
      String result=name+">>"+age;
      return result;
    }

2.页面访问

2.2 获取pojo的参数

注意:jQuery中,$.ajax()默认发送的参数类型及编码为:application/x-www-form-urlcoded,而@RequestBody处理的参数类型及编码为:aplication/json;

在前端提交的数据类型:contentType设置为aplication/json;则controller的通过javabean的属性,则无法获取参数的值。

1.controllerdiam

    /**
    * @author liujianfu
    * @description      controller中业务方法的pojo参数属性名与请求参数名称一致,参数值会自动映射匹配
    * @date 2021/1/10 22:14
    * @param
    * @return
    */
    @RequestMapping("/bike2")
    @ResponseBody
    public String bike2(User user){
        System.out.println("获取的参数name:"+user.getUserName()+" age:"+user.getAge());
        String result=user.getUserName()+">>"+user.getAge();
        return result;
    }

2.userbean:

package com.ljf.spring.mvc.demo.bean;

/**
 * @ClassName: User
 * @Description: TODO
 * @Author: liujianfu
 * @Date: 2021/01/10 17:26:08 
 * @Version: V1.0
 **/
public class User {
    private  String userName;
    private int age;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

 

3.页面访问

2.3 获取数组的参数

1.controller

    /**
     * @author liujianfu
     * @description      controller中业务方法的pojo参数属性名与请求参数名称一致,参数值会自动映射匹配
     * @date 2021/1/10 22:14
     * @param
     * @return
     */
    @RequestMapping("/bike3")
    @ResponseBody
    public String bike3(String [] strArray){
        System.out.println("获取的参数name:"+strArray[0]+" age:"+strArray[1]);
        String result=strArray[0]+">>"+strArray[1];
        return result;
    }

2.页面访问

2.4 获取结合的参数

1.controller

@RequestMapping("/bike4")
    public String bike4(){
        return "bike";
    }
    /**
     * @author liujianfu
     * @description      controller中业务方法的集合参数获取,要将集合参数封装到一个pojo中才可以
     * 参数属性名与请求参数名称一致,参数值会自动映射匹配
     * @date 2021/1/10 22:14
     * @param
     * @return
     */
    @RequestMapping("/bike5")
    @ResponseBody
    public String bike5(Vo v){
        System.out.println("v:"+v);
     List<User> userList= v.getUserList();
     for(User u:userList){
         System.out.println("user:"+u.getUserName());
     }
        return "ok";
    }

2.vobean

package com.ljf.spring.mvc.demo.bean;

import java.util.List;

/**
 * @ClassName: Vo
 * @Description: TODO
 * @Author: liujianfu
 * @Date: 2021/01/10 22:55:01 
 * @Version: V1.0
 **/
public class Vo {
    private List<User> userList;

    public List<User> getUserList() {
        return userList;
    }

    public void setUserList(List<User> userList) {
        this.userList = userList;
    }

    @Override
    public String toString() {
        return "Vo{" +
                "userList=" + userList +
                '}';
    }
}

3.jsp页面

<%--
  Created by IntelliJ IDEA.
  User: jurfl
  Date: 2021/1/10
  Time: 22:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/bike5" method="post">
    <input type="text" name="userList[0].userName"/><br>
    <input type="text" name="userList[0].age"/><br>
    <input type="text" name="userList[1].userName"/><br>
    <input type="text" name="userList[1].age"/><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

4.页面访问

 

 

2.5 使用@RequestBody获取ajax的json串

当使用ajax时,可以指定contentType为json时,那么方法参数位置使用@RequestBody 可以直接接收集合数据而无需要 使用pojo进行包装。

1.controller层

  /**
     * @author liujianfu
     * @description      controller中业务方法的集合参数获取,要将集合参数封装到一个pojo中才可以
     * 参数属性名与请求参数名称一致,参数值会自动映射匹配
     * @date 2021/1/10 22:14
     * @param
     * @return
     */
    @RequestMapping("/bike6")
    public String bike6(){
      System.out.println("controller6:");
        return "ajax";
    }
    /**
     * @author liujianfu
     * @description      controller中业务方法的集合参数获取,要将集合参数封装到一个pojo中才可以
     * 参数属性名与请求参数名称一致,参数值会自动映射匹配
     * @date 2021/1/10 22:14
     * @param
     * @return
     */
    @RequestMapping("/bike7")
    @ResponseBody
    public String bike7(@RequestBody List<User> userList){
        for(User u:userList){
            System.out.println("user:"+u.getUserName());
        }
        return "ok";
    }

2.jsp页面


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
    <script>
        var userList=new Array();
        userList.push({userName:"beijing",age:34});
        userList.push({userName:"shanghai",age:89});
        $.ajax({
            type:"post",
            url:"${pageContext.request.contextPath}/bike7",
            data:JSON.stringify(userList),
            contentType:"application/json;charset=utf-8",
            success:function(result){
                alert(result);
            }
        })
    </script>
</head>
<body>

</body>
</html>

3.配置静态资源的释放器

在spring-mvc.xml文件中配置

    <mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
    <mvc:resources mapping="/images/**" location="/images/"></mvc:resources>
    <mvc:resources mapping="/css/**" location="/css/"></mvc:resources>

4.启动服务进行访问

 可以看到,控制台打印输出controller层中输出的ajax页面提交的json数据

 

2.6 使用@RequestParam 注解获取参数

参数绑定注解@requestParam
*                   value :与请求参数名称
*                   required:  此在制定的请求参数是否必须包括,默认true,提交参数如果没有则报错
*                   defaultvalue 当没有制定请求参数时,则使用制定的默认值赋值。

1.controller层代码

    /**
     * @author liujianfu
     * @description      参数绑定注解@requestParam
     *                   value :与请求参数名称
     *                   required:  此在制定的请求参数是否必须包括,默认true,提交参数如果没有则报错
     *                   defaultvalue 当没有制定请求参数时,则使用制定的默认值赋值。
     * 参数属性名与请求参数名称一致,参数值会自动映射匹配
     * @date 2021/1/10 22:14
     * @param
     * @return
     */
    @RequestMapping("/bike8")
    @ResponseBody
    public String bike8(@RequestParam(value="name",required = false,defaultValue = "ljf") String username){
        System.out.println("username:"+username);
        return "ok";
    }

2.重启服务,访问

 

2.7 使用Restful的风格获取参数

restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件,用户客户端月服务端交互,更加简洁,易于实现缓存机制。

Restful风格的请求是使用“url+请求方式”,表示一次请求目的,http的4个表示方式:

1get :获取资源  如     /user/1   GET:  得到id=1的user

2.post: 新建资源  如   /user/     新增user

3.put :用户更新资源  如: /user/1   更新id=1 的user

4.delete :用于删除资源  如: /user/1   删除id=1的user

在springMvc中可以使用站位符,进行参数绑定,地址/user/1可以写成/user/{id},占位符{id}对应的就是1的值,在业务方法中可以使用@PathVariable注解进行占位符的匹配获取工作

1.controller代码

    /**
     * @author liujianfu
     * @description      参数绑定注解@requestParam
     *                   value :与请求参数名称
     *                   required:  此在制定的请求参数是否必须包括,默认true,提交参数如果没有则报错
     *                   defaultvalue 当没有制定请求参数时,则使用制定的默认值赋值。
     * 参数属性名与请求参数名称一致,参数值会自动映射匹配
     * @date 2021/1/10 22:14
     * @param
     * @return
     */
    @RequestMapping("/bike9/{pname}")
    @ResponseBody
    public String bike9(@PathVariable(value="pname",required = false) String username){
        System.out.println("username:"+username);
        return "ok";
    }

 

2.页面访问

 

2.8  使用原始HttpservletReuest,reponse,session对象获取参数

 

1.controller

/**
     * @param
     * @return
     */
    @RequestMapping("/bike11")
    @ResponseBody
    public String bike11(HttpServletRequest request, HttpServletResponse response, HttpSession session){
        System.out.println("request:"+request);
        System.out.println("reponse:"+response);
        System.out.println("session:"+session);
        String s=request+" "+response+" "+session;
        return s;
    }

2.页面访问

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值