本人转载自: http://blog.csdn.net/feicongcong/article/details/54705933

return "redirect:/icProject/index"; 重定向到请求

model.addAttribute("page", page);

        return "icProject/index";跳转到页面

1.ajax提交,将数组封装成json,后台用List<Integer>接

2.form提交

方法一:

前台form

<form action="/sysUser/create" method="post">
<input name="roleId" >
<input name="roleId" >
<input name="roleId" >
</form>

后台

public String create(Model model,@Valid SysUserPojo sysUserPojo, BindingResult bindingResult, final RedirectAttributes
redirectAttributes,@RequestParam(value="roleId", required = false) List<Long> roleIds) { }

方法二:

前台form

<form action="/sysUser/create" method="post">
<input name="menuIds[0]" >
<input name="menuIds[1]" >
<input name="menuIds[2]" >
</form>

后台

@RequestMapping(value = "/create", method = RequestMethod.POST)  

    public String create(
@Valid SysRoleDto sysRoleDto, BindingResult bindingResult, final RedirectAttributes redirectAttributes) { }
public class SysRoleDto extends SysRolePojo {
@NotNull
private List<Long> menuIds; public SysRoleDto() {
}
public List<Long> getMenuIds() {
return menuIds;
} public void setMenuIds(List<Long> menuIds) {
this.menuIds = menuIds;
}
}

方法三

@ResponseBody
@RequestMapping(value = "/ajaxsortPriority")
public ResultDo ajaxsortPriority(@RequestParam("ids[]") Long[] ids) {
ResultDo resultDo=new ResultDo();
int size=cmsBannerService.sortPriority(ids);
if(size==ids.length){
resultDo.setSuccess(true);
}else{
resultDo.setSuccess(false);
}
return resultDo;
}

var param=[];
$("#tb_order").find("td[name='id']").each(function(){
param.push($(this).text());
})
var ids={ids:param};
$.ajax({
cache: true,
type: "GET",
url: "/cmsBanner/ajaxsortPriority",
dataType:"json",
data:ids,
async: false,
success: function (data) {

方法4

@RequestMapping(value = "/cfgRepayRemind", method = RequestMethod.POST)
@ResponseBody
public ResultDo<?> cfgRepayRemind(
@RequestBody List<SysDictPojo> sysDictPojos //@RequestBody 前台请求的数据格式必须为json ) {
ResultDo<?> resultDo = ResultDo.build();
try {
icProjectRepayService.cfgRepayRemind(sysDictPojos);
} catch (Exception e) {
resultDo.setSuccess(false);
} return resultDo;
}
function cfgRepayRemind(ele) {
var url = $(ele).attr("value");
var params = [];
$("#repayRemindMobile").find("ul").each(function () {
var id = $(this).find("input[name='id']").eq(0).val();
var value = $(this).find("input[name='value']").eq(0).val(); params.push({id: id, value: value});//id,value 为java bean里的属性,名字一致
}) $.ajax({
cache: true,
type: "POST",
url: url,
data: JSON.stringify(params),// 指定请求的数据格式为json,实际上传的是json字符串
contentType: 'application/json;charset=utf-8',//指定请求的数据格式为json,这样后台才能用@RequestBody 接受java bean
dataType: "json",
async: false,
success: function (data) {
if (data.success) {
toastr.success("操作成功");
setTimeout(function () {
location.reload();
}, 1000)
}
}
});
}
public class SysDictPojo extends AbstractBasePojo {
private Long id;
private String key;
private String value;
private String description; }

PS

场景一

$.ajax({
type:"post",
<span style="white-space:pre"> </span> data:{total:'100'},
dataType:'json', url:"http://127.0.0.1:8089/icProject/test",
success:function () { }
})
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public String test(@RequestParam("total") String total ) {
return null;
}

后台可以取到total=100,发现默认是以 application/x-www-form-urlencoded 格式提交请求数据的

场景二

function testpost1() {
$.ajax({
type:"post",
data:{total:'100',icProjectPojo:{totalAmount:10000}}, dataType:'json',
url:"http://127.0.0.1:8089/icProject/test",
success:function () { }
})
}

icProjectPojo[totalAmount]:
10000 是以这样的key-value 形式提交数据的 ,而不是json对象的方式
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public String test(HttpServletRequest request, @RequestParam("total") String total, IcProjectPojo icProjectPojo ) {
return null;
}

后台接收时,IcProjectPojo这个bean里的totalAmount明显是就收不到数据的,如果有一个属性叫 icProjectPojo[totalAmount] ,那他会接受到数据

所以传对象要用@RequestBody (方法里只有一个,即必须是一整个对象)和

data:JSON.stringify(params),//此处也不用给对象取key,因为后台的方法里@RequestBody 只允许注解一个对象

 contentType: "application/json",

不使用contentType: “application/json”则data可以是对象

使用contentType: “application/json”则data只能是json字符串

方法五:表单数据序列化,ajax提交

var params = $("#sysUserFrm").serialize();
var url = "/sysUser/settingSave"
$.ajax({
cache: true,
type: "POST",
url: url,
data: params,
dataType: "json",
async: false,
success: function (data) {}
})

@RequestMapping(value = "/settingSave", method = RequestMethod.POST)
@ResponseBody
public ResultDo<?> settingSave(SysUserPojo sysUserPojo) {}

这样sysUserPojo也能接收到Bean,其实这里的$("#sysUserFrm").serialize()  就相当于组装的  json对象 { }

ps:

var formData = new Object();
$("input").each(function () {
if ($(this).val() == "") {
return;
}
formData[$(this).attr("name")] = $(this).val();
});

总结:

get请求

一、url?key1=value1&key2=value2

二、form表单 (浏览器network里可看到实际上可是参数加url后面)

java:

<span style="color:#000000">@GetMapping("/logined")
public String logined(@RequestParam(value="userName",required = false) String userName,
EpSystemUserPo po,
MyUeerPo userPo) {//不采用@RequestBody入参可有多个,可与@RequestParam混用
//前台传来userName参数,后台的userName,po中的userName属性,userPo中的userName属性都会接收到值
return "index";
}</span>

js

<form   action="/backend/logined" method="GET" enctype="">
<div class="form-group">
<input name="userName" placeholder="用户名" >
</div>
<div class="form-group">
<input type="password" class="form-control" name="password" placeholder="密码" required="">
</div>
<button type="submit" >登 录</button>
</form>

发起请求后,后台未响应时(比如下了断点),因为get请求实际就是url后加参数故没有content-type这个参数

后台响应后,响应了会有status
code

post请求
一、form表单 (同get的区别在于content-type)

后台controller入参同样可以 @RequestParam(value="userName",required = false) String userName,

                          EpSystemUserPo po, 这样混用

后台未响应时

二、ajax的post方式提交请求

1.不用@RequestBody

后台java

@PostMapping("/logined")
public String logined(
@RequestParam(value="userName",required = false) String userName,
EpSystemUserPo po,
MyUeerPo userPo
) {//不采用@RequestBody入参可有多个,可与@RequestParam混用
//前台传来userName参数,后台的userName,po中的userName属性,userPo中的userName属性都会接收到值
return "login";
}

前台js

function logined() {
$.ajax({
type: "POST",
url: "/backend/logined",
data: $("#userFrm").serialize(),
success: function (data) {}
})
}

2.使用@RequestBody(实际上接受的是json的字符串)

@PostMapping("/logined")
public String logined(
// @RequestParam(value="userName",required = false) String userName,
@RequestBody EpSystemUserPo epSystemUserPo
// MyUeerPo userPo
) {//采用@RequestBody入参只有一个
return "login";
}
function logined() {
$.ajax({
type: "POST",
url: "/backend/logined",
data:JSON.stringify({userName:"cater",password:"123456"}) ,//转成字符串
contentType: "application/json;charset=utf-8",//不使用contentType: “application/json”则data可以是对象,使用contentType: “application/json”则data只能是json字符串
success: function (data) {}
})
}

这里使用时必须先组装json对象{username:"carter" },我的习惯是用 @RequestBody接受带List对象的对象或者List对象,因为js中有个push方法组list比较简单,二在页面上通过name="id[0]",这种方式很繁琐,而且动态化[]的索引很难搞

Springmvc后台接前台数组,集合,复杂对象的更多相关文章

  1. AJAX 向后台发送带 List 集合的对象

    现有基类: public class School { int name; int address; List<Student> students = new ArrayList<S ...

  2. SpringMVC后台接受前台传值的方法

    1.HttpRequestServlet 接收前台传值 @RequestMapping("/go5") public String hello5(HttpServletReques ...

  3. AJAX 向后台发送带 List 集合的对象(转)

    var school = {};school.name = '清华大学';school.address = "北京";//此处使用的是 easyui 插件来获取数据var rows ...

  4. springmvc后台接前端的参数,数组,集合,复杂对象等

    springmvc后台接前端的参数,数组,集合,复杂对象等 参考地址:https://blog.csdn.net/feicongcong/article/details/54705933  常用的几种 ...

  5. 分享知识-快乐自己:SpringMvc整合遇到-前台传JSON参数,后台实体类对象接收

    前台数据转JSON对象: /** * * @param $myFrom:from表单 * @returns {{}} */ function from($myFrom) { var ebookEntr ...

  6. spring MVC 如何接收前台传入的JSON对象数组并处理

    spring MVC 如何接收前台传入的JSON对象数组 主要方法: (主要用到的包是 net.sf.json  即:json-lib-2.3-jdk15.jar 完整相关jar包: commons- ...

  7. spring MVC 如何接收前台传入的JSON对象数组

    spring MVC 如何接收前台传入的JSON对象数组 主要方法: (主要用到的包是 net.sf.json  即:json-lib-2.3-jdk15.jar 完整相关jar包: commons- ...

  8. SpringMVC Get请求传集合,前端"异步"下载excel 附SpringMVC 后台接受集合

    最近项目上管理后台需要自己做一部分js部分,之前都是前端来弄...碰到了下载excel,刚开始使用ajax,搞了好久发现不合适..下载不了,网上说ajax返回类型不支持二进制流.. 因此采用 wind ...

  9. 【springMVC 后台跳转前台】1.使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中 ----2.前后台都没有报错,不能进入ajax回调函数

    问题1: 使用ajax访问的后台,后台正常执行,并且正常返回数据,但是不能进入前台的ajax回调函数中 问题展示:  问题解决: 最后发现是因为后台的方法并未加注解:@ResponseBody,导致方 ...

随机推荐

  1. 解决autowaired注入时机问题

    package com.haiyisoft.loveLifeWeb.config; import javax.annotation.PostConstruct; import org.springfr ...

  2. Sql UpdateOrInsert

    SqlServer(先更新,受影响条数为0,则Insert,通过事务): begin tran update table set column=columnvalue where wherestr b ...

  3. JetBrain系列学生免费授权

    1.访问网址:https://www.jetbrains.com/zh/student/ 2.往下滚动,点击立即申请 3.填写邮箱信息 4.确认后,跳转到Thank you页面,上面说已经给注册邮箱发 ...

  4. 【汇总】数据库提权(mysql、mssql)

    日期:2018-04-03 11:46:45 作者:Bay0net 介绍:利用 mssql 的 sa 账号提权.利用 MySQL 的 UDF 提权 0x01.mssql 提权 恢复 xp_cmdshe ...

  5. Redis ==> 高级

    一.发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis 客户端可以订阅任意数量的频道. 下图展示了频道 channel ...

  6. Jenkins笔录

    1.Linux下安装jdk8的方法 ,只需要一条命令就可以安装jdk: yum install java-1.8.0-openjdk* -y 执行过这条命令无需配置,直接可以使用. 2.JDK12版本 ...

  7. [笔记] 使用otunnel从外网访问内网

    需求 内网机器没有公网IP,但是可以访问外网,现在需要从外网访问内网机器. 举例,在家里机器A访问公司内网机器B. 前提 需要一台有公网IP的服务器S做中转,这样就可以打通AB两端了. A <- ...

  8. C基础知识(3):指针--概念、数组中指针的递增/递减、指针数组&数组指针、指向指针的指针

    指针是一个变量,其值为另一个变量的地址. 所有指针的值的实际数据类型,不管是整型.浮点型.字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数. 下面从4个代码例子分别讲述以下 ...

  9. win2008系统:iis配置备份和还原简单操作

    (2013-09-26 16:33:22) 转载▼   分类: 开发类 当我们电脑系统有大量的站点和虚拟目录的时候,电脑因为种种原因需要重做系统,那么重装系统后这些站点我们是否只能一个一个的添加,如果 ...

  10. PHP常用的 五种设计模式及应用场景

    设计模式六大原则 开放封闭原则:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象. 依赖倒置原则:高层模块不应该依赖低层模块,二者 ...