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

这篇文章主要介绍了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) */ 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 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 getStudents() {         return students;     }       public void setStudents(List students) {         this.students = students;     } }

Controoler

  /**      * 接收复杂对象参数(包含id,username,String[],List)      *       * @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 

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 list) {         for (int i = 0; i 

6.List对象集合

    /**      * 接收对象List集合      *       * @param      * @return      */     @RequestMapping(value = "/getListByObjectParam")     @ResponseBody     public void getListByObjectParam(@RequestBody List students) {         for (int i = 0; i 

后续类型在补充。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持0133技术站。

以上就是js传各种类型参数到Controller层的整理方式的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » JavaScript 教程