最近开发 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。

ajax 调用 java webapi 多个参数(一)的更多相关文章

  1. ajax 调用 java webapi 多个参数(二)

    第一种方法:http://blog.csdn.net/hanjun0612/article/details/74436273 附上另一种解决方法. 这个方法主要针对  嵌套模型(模型中含有模型)的ap ...

  2. 利用Ajax调用controller方法并传递参数

    一.背景由于近期工作需要将人脸识别功能与选课系统结合,但是对前端知识了解的很少,只能边做边学了,因此在这边把遇到的一些坑说明一下,希望能帮助到像我一样的初学者 二.具体内容这里采用框架为MVC,如果想 ...

  3. ajax调用c#后端,发现参数没数值

    之前是int的数据,名字是id 后面被改成字符串的数据,名字是encrptedId 因为名字不匹配,导致找不到数值.只需要把js里调用传递的参数名字改一下,或者C#后端,继续保持原来的名字

  4. C++调用JAVA方法详解

    C++调用JAVA方法详解          博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...

  5. Android JNI开发之C/C++层调用JAVA

    一.从C/C++层调用JAVA层代码(无参数调用) //在c代码里面调用java代码里面的方法 // java 反射 // 1 . 找到java代码的 class文件 // jclass (*Find ...

  6. Android NDK学习(四):C/C++层调用JAVA

    一.从C/C++层调用JAVA层代码(无参数调用) //在c代码里面调用java代码里面的方法 // java 反射 // 1 . 找到java代码的 class文件 // jclass (*Find ...

  7. lua调用java java调用lua[转载]

    转载:http://dualface.github.io/blog/2013/01/01/call-java-from-lua/LuaJavaBridge - Lua 与 Java 互操作的简单解决方 ...

  8. java 调用 C# webapi

    最近项目需要 java调用  .net 的webapi. 对于get来说很简单,但是post方法遇到了些问题,最后也是曲线救国. 先看代码 Java  代码 public static void ma ...

  9. c#代码 天气接口 一分钟搞懂你的博客为什么没人看 看完python这段爬虫代码,java流泪了c#沉默了 图片二进制转换与存入数据库相关 C#7.0--引用返回值和引用局部变量 JS直接调用C#后台方法(ajax调用) Linq To Json SqlServer 递归查询

    天气预报的程序.程序并不难. 看到这个需求第一个想法就是只要找到合适天气预报接口一切都是小意思,说干就干,立马跟学生沟通价格. ​ ​不过谈报价的过程中,差点没让我一口老血喷键盘上,话说我们程序猿的人 ...

随机推荐

  1. SQL查询今天、昨天、7天内、30天 - 转

    今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0 昨天的所有数据:select * from 表名 where ...

  2. JQuery将form表单值转换成json字符串函数

    由于后台接口限定,必须要将表单内容转换成json字符串提交,因此写了一个将form表单值转成json字符串的函数.     前提:页面引入了JQuery          下面直接上代码 一.代码 / ...

  3. 同一个解决方案或有依赖关系的两个项目引用同名但不同版本的DLL

    问题描述 我们最近在使用Redis作Session的集中化,中间碰到了一个如下问题:我们有一些项目比较老,引用了NewtonJson的4.0.3.0版本的DLL,但是Redis提供的C#集成DLL引用 ...

  4. Luogu P2257 YY的GCD

    莫比乌斯反演第一题.莫比乌斯反演入门 数论题不多BB,直接推导吧. 首先,发现题目所求\(ans=\sum_{i=1}^n\sum_{j=1}^m [\gcd(i,j)=prime]\) 考虑反演,我 ...

  5. 解读tensorflow之rnn

    from: http://lan2720.github.io/2016/07/16/%E8%A7%A3%E8%AF%BBtensorflow%E4%B9%8Brnn/ 这两天想搞清楚用tensorfl ...

  6. 【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--控制器和处理函数的注册篇(4/8)【controller+action】

    文章目录 前情概要 前边的文章把一些基本的前置任务都完成了.接下就是比较重要的处理函数action是如何自动发现和注册的拉,也就是入口函数RouteHandler(也是我们的第一个express中间件 ...

  7. Python练习-8

    1,复习 ascii:字母,数字,特殊字符:1个字节,8位 Unicode:16位 两个字节 升级 32 位 四个字节 utf-8:最少一个字节 8位表示. 英文字母 8位 1个字节 欧洲16位,2个 ...

  8. 《Linux内核分析》期终总结

    作者:杨舒雯,原创作品转载请注明出处,<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 目录: 1.通过简 ...

  9. github实验三结对报告

    一.题目简介 本项目需要实现一个具有四则运算的计算器,能够实现基本的加.减.乘.除运算,以及其他的辅助功能(阶乘.正弦.余弦.指数运算):界面简洁实用,模拟Windows中的计算器程序,要提供主要的设 ...

  10. QT 子窗口退出全屏

    m_pWidget代表子窗口, 子窗口显示全屏: m_pWidget->setWindowFlags(Qt::Dialog); m_pWidget->showFullScreen(); 子 ...