zoukankan      html  css  js  c++  java
  • ajax 调用 java webapi 多个参数(一)

    最近开发 java webapi。

    遇到一个问题,如果是多个参数(其中包含对象类型),我应该怎么传递?


    一  先看解决方案:


    ajax

    <script>
        var data={ "userid":"15","account":"hj","password":"123","a":"111","b":222};
        $.ajax({
            type: 'post',
            url: '/sanjuSCM/api/test/test',
            dataType:"json",
            data: data,
            success: function (data) {
                alert(data);
            }
        });
    </script>

    PS:json字段名必须与model属性中的字段名一样!!!


    java webapi

    @RequestMapping(value = "test", method = RequestMethod.POST)
    	public BaseResult test(HttpServletRequest request, HttpServletResponse response,
    	SysUser user, @RequestParam String a, @RequestParam Integer b) throws Exception {
    
    		ApiResult rm = new ApiResult();
    		rm.setData(a);
    		return rm;
    	}
    

    PS:userid,account,password都会映射到 user对象。
    a,b分别映射到a和b参数。(@RequestParam可以不加)


    二  问题:虽然问题解决了,但有些不明白的地方


    那么问题来了,当我使用 
    @RequestBody SysUser user,@RequestParam String a,@RequestParam Integer b
    这样的话,由于@RequestBody 需要设置json字符串,导致a和b无法接收(大家也知道@RequestBody唯一。所以不指望出现3个@RequestBody了)。
    如果我改成
    @RequestParam SysUser user,@RequestParam String a,@RequestParam Integer b
    又发觉@RequestParam 无法映射实体对象。

    那么当我直接SysUser user,@RequestParam String a,@RequestParam Integer b   什么注解都不添加的情况下,
    为何能接收到?他属于哪种注解类型???
    (目前,我把问题归结到:
    Content-Type:
    application/x-www-form-urlencoded; charset=UTF-8作为默认类型的关系


    三  至于网上流传的3种方案,我也知道。但是我并不中意,

    方案1   使用map<>,这无疑加大了后台根据key取值的工作量,当然如果你使用泛型来封装,倒也可以。这也是没办法中的办法了。

    方案2  将2个对象合并,对于多种多样的模型,创建很多类我觉得不可取。

    方案3  好像是   实现自己的HandlerMethodArgumentResolver  类似于方案1。


  • 相关阅读:
    2010齐鲁软件大赛题目(十一)虚拟化环境下的多媒体教室设计
    随机数产生
    2010齐鲁软件大赛题目(十三).基于iPhone的移动互联网软件创意设计
    C语言
    操作符是否合法
    2010齐鲁软件大赛题目(十二)基于物联网的智慧校园系统的开发与设计
    2010齐鲁软件设计大赛题目
    2010齐鲁软件大赛题目(十)基于3G手机平台的大学生行动手册的研究与开发
    突击战
    勇者斗恶龙
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/9779791.html
Copyright © 2011-2022 走看看