js传各种类型参数到Controller层的整理方式

 更新时间:2023年02月27日 10:17:16   作者:无人与我把酒欢  
这篇文章主要介绍了js传各种类型参数到Controller层的整理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

做web开发的一直遇到一个问题怎么发请求带各种类型的参数到Controller层,每次都要测试好久才能请求成功。今天趁有空查资料总结巩固一下。

一 .@RequestBody和@RequestParam区别

1.@RequestParam

用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)

RequestParam可以接受简单类型的属性,也可以接受对象类型。 

实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。

2.@RequestBody

处理HttpEntity传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据。

  • GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
  • POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。 

3.@ModelAttribute

该注解有两个用法,一个是用于方法上,一个是用于参数上;

用于方法上时: 通常用来在处理@RequestMapping之前,为请求绑定需要从后台查询的model;

用于参数上时:用来通过名称对应,把相应名称的值绑定到注解的参数bean上;要绑定的值来源于:

  • A) @SessionAttributes 启用的attribute 对象上;
  • B) @ModelAttribute 用于方法上时指定的model对象;
  • C) 上述两种情况都没有时,new一个需要绑定的bean对象,然后把request中按名称对应的方式把值绑定到bean中。

二.一些常用的传参类型 

1.字符串类型参数

/**
 * 传递字符串参数
 */
getStringParam:function(){
   var param={"stringParams":hidden_input_value};
   //var param={};两种方式都行
   // param.stringParams=hidden_input_value;
   $.ajax({
      url:basePath+"/ParamFormatController/getStringParam.shtml",
      data:param,
      type : 'POST',
      dataType : 'json',
      success:function(data){
         
      },
      
   })
},

Controller层

  /**
     * 接收字符串类型参数
     * 
     * @param userName
     * @return
     */
    @RequestMapping("/getStringParam")
    @ResponseBody
    public String getStringParam(String userName) {
        String password = userService.getUserpassword(userName);
        return password;
    }

2.对象类型

/**
		 * 传递对象参数
		 */
		setObjectParam:function(){
			var objectParams={};
			objectParams.name="张三";
			objectParams.age="19";
			objectParams.sex="男";
			$.ajax({
				url:basePath+"/ParamFormatController/getObjectParam.shtml",
				data:objectParams,
				type : 'POST',
				dataType : 'json',
				success:function(data){
					
				},
			})
		},
    /**
     * 接收对象参数
     * 
     * @param
     * @return
     */
    @RequestMapping("/getObjectParam")
    @ResponseBody
    public void getObjectParam(Student objectParams) {
        System.out.println("姓名:" + objectParams.getName());
        System.out.println("性别:" + objectParams.getSex());
        System.out.println("年龄:" + objectParams.getAge());
 
    }

3.复杂对象类型

/**
		 * 传递复杂对象参数(包含id,username,String[],List<Person>)
		 */
		setHardObjectParam:function(){
			
			 var objectParams = {
	                    schoolName:"鹏峰中学",
	                    data:new Date(),
	                    teacherNames:["张老师","李老师","王老师"],
	                    students:[
	                        {name:"小明",sex:"男",age:"19"},
	                        {name:"小红",sex:"男",age:"19"},
	                    ]
	                };
	                $.ajax({
	                    type: "POST",
	                    url:basePath+"/ParamFormatController/getHardObjectParam.shtml",
	                    data: JSON.stringify(objectParams),//重点
	                    contentType:"application/json"     //指定类型
	                })
		},

School类

public class School {
    private String[] teacherNames;
    private String schoolName;
    private Date data;
    private List<Student> students;
 
 
 
    public String[] getTeacherNames() {
        return teacherNames;
    }
 
    public void setTeacherNames(String[] teacherNames) {
        this.teacherNames = teacherNames;
    }
 
    public String getSchoolName() {
        return schoolName;
    }
 
    public void setSchoolName(String schoolName) {
        this.schoolName = schoolName;
    }
 
    public Date getData() {
        return data;
    }
 
    public void setData(Date data) {
        this.data = data;
    }
 
    public List<Student> getStudents() {
        return students;
    }
 
    public void setStudents(List<Student> students) {
        this.students = students;
    }
}

Controoler

  /**
     * 接收复杂对象参数(包含id,username,String[],List<Person>)
     * 
     * @param
     * @return
     */
    @RequestMapping("/getHardObjectParam")
    @ResponseBody
    public void getHardObjectParam(@RequestBody School objectParams) {
        System.out.println("学校名:" + objectParams.getSchoolName());
 
    }

4.数组与字符串

/**
         * 传递数组与字符串
         */
        getArrayAndStringParam:function(){
            var pointCodes= new Array(); //定义一数组  
            pointCodes.push("1");
            pointCodes.push("2");
            pointCodes.push("3");
            pointCodes.push("4");
            $.ajax({  
                url:basePath+"/ParamFormatController/getArrayAndStringParam.shtml",  
                type:"POST",  
                data:{"names":pointCodes,"id":'6'},  
                dataType:"json",  
                success:function(res){     
                }
                }); 
            
        },              


    /**
     * 接收数组与字符串
     * 
     * @param
     * @return
     */
    @RequestMapping("/getArrayAndStringParam")
    @ResponseBody
    public void getArrayAndStringParam(@RequestParam(value = "names[]") String[] names, String id) {
        for (int i = 0; i < names.length; i++) {
            System.out.println(names[i]);
        }
 
    }

5.List字符串集合

        /**
         * 传递字符串List参数
         */
        getListByStringParam:function(){
                var orderNosList = new Array(); 
                orderNosList.push("List1");
                orderNosList.push("List2");
                orderNosList.push("List3");
                orderNosList.push("List4");
                $.ajax({
                    url:basePath+"/ParamFormatController/getListByStringParam.shtml",
                    data:{"StringList":orderNosList},
                    type : 'POST',
                    dataType : 'json',
                    success:function(data){
                        
                    },
                })
            
        },

    /**
     * 接收字符串List集合
     * 
     * @param
     * @return
     */
    @RequestMapping("/getListByStringParam")
    @ResponseBody
    public void getListByStringParam(@RequestParam("StringList[]") List<String> list) {
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
 
    }

6.List对象集合

    /**
     * 接收对象List集合
     * 
     * @param
     * @return
     */
    @RequestMapping(value = "/getListByObjectParam")
    @ResponseBody
    public void getListByObjectParam(@RequestBody List<Student> students) {
        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            System.out.println(s.getName());
        }
 
    }

/**
         * 传递对象List参数
         */
        getListByObjectParam:function(){
                 var param=[];
                 var data1={"name":"张三","age":"21","sex":"2"};
                                 var data2={"name":"李四","age":"24","sex":"2"};
                                 param.push(data1);
                                 param.push(data2);
                $.ajax({
                    url:basePath+"/ParamFormatController/getListByObjectParam.shtml",
                    data:JSON.stringify(param),
                    type : 'POST',
                    contentType: "application/json",
                    success:function(data){
                        
                    },
                })
            
        },

后续类型在补充。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 在微信小程序中使用iconfont的最新图文教程

    在微信小程序中使用iconfont的最新图文教程

    由于微信小程序线上的资源限制了各种接口安全域名,所以在小程序里如果想使用iconfont字体图标就会稍有不同,下面这篇文章主要给大家介绍了关于在微信小程序中使用iconfont的相关资料,需要的朋友可以参考下
    2022-08-08
  • javascript实现二分查找法实现代码

    javascript实现二分查找法实现代码

    javascript实现二分查找法实现代码...
    2007-11-11
  • js中scrollTop()方法和scroll()方法用法示例

    js中scrollTop()方法和scroll()方法用法示例

    这篇文章主要介绍了js中scrollTop()方法和scroll()方法用法,结合实例形式分析了scrollTop()方法和scroll()方法滚动操作的用法与相关操作技巧,需要的朋友可以参考下
    2016-10-10
  • echarts学习笔记之箱线图的分析与绘制详解

    echarts学习笔记之箱线图的分析与绘制详解

    最近在学习echarts,所以下面这篇文章主要给大家介绍了关于echarts学习笔记之箱线图的分析与绘制的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-11-11
  • canvas实现钟表效果

    canvas实现钟表效果

    本文主要分享了canvas实现钟表效果的示例代码。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 深入理解JavaScript系列(31):设计模式之代理模式详解

    深入理解JavaScript系列(31):设计模式之代理模式详解

    这篇文章主要介绍了深入理解JavaScript系列(31):设计模式之代理模式详解,代理模式使得代理对象控制具体对象的引用,代理几乎可以是任何对象:文件,资源,内存中的对象,或者是一些难以复制的东西,需要的朋友可以参考下
    2015-03-03
  • bootstrap下拉菜单使用方法解析

    bootstrap下拉菜单使用方法解析

    这篇文章主要为大家详细解析了bootstrap下拉菜单使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • JS事件循环机制event loop宏任务微任务原理解析

    JS事件循环机制event loop宏任务微任务原理解析

    这篇文章主要介绍了JS事件循环机制event loop宏任务微任务原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • javascript数字验证的实例代码(推荐)

    javascript数字验证的实例代码(推荐)

    下面小编就为大家带来一篇javascript数字验证的实例代码(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • js加载读取内容及显示与隐藏div示例

    js加载读取内容及显示与隐藏div示例

    这篇文章主要介绍了js加载读取内容及显示与隐藏div的方法,需要的朋友可以参考下
    2014-02-02

最新评论