环境说明
jdk1.8,spring版本为4.3.3,jackson版本为2.8.9,lombok版本为1.18.10
如果你没有用lombok插件,将下面的@Data注解去掉,添加get和set方法也可以。
相关配置
applicationContext-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="controller"/>
<mvc:annotation-driven>
<mvc:message-converters>
<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
<property name = "supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->
<property name="prefix" value="/application/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
pom.xml自行配置,相关版本上面也说了,比较简单。
具体代码实现
controller层的代码
package controller;
import entity.Account;
import entity.User1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Controller
@RequestMapping("/user1")
public class User1Controller {
@RequestMapping("/test1")
@ResponseBody
public String test1(HttpServletRequest request,String username) throws Exception{
System.out.println(username);
return "test1 success";
}
@RequestMapping("/test2")
@ResponseBody
public String test2(HttpServletRequest request,@RequestParam("username") String name) throws Exception{
System.out.println(name);
return "test2 success";
}
@RequestMapping("/test3")
@ResponseBody
public String test3(HttpServletRequest request,@RequestParam("username") String name,String password) throws Exception{
System.out.println(name+":"+password);
return "test3 success";
}
@RequestMapping("/test4")
@ResponseBody
public String test4(HttpServletRequest request,@RequestBody Integer[] ids
/*@RequestBody List<Integer> ids 参数名字随意*/) throws Exception{
System.out.println(ids.length);
return "test4 success";
}
@RequestMapping("/test5")
@ResponseBody
public String test5(HttpServletRequest request,
//@RequestParam("datas[]") Integer[] ids
//@RequestParam("datas[]") Set<Integer> ids
@RequestParam("datas[]") List<String> ids
) throws Exception{
//System.out.println(ids.length);
System.out.println(ids.get(0));
return "test5 success";
}
@RequestMapping("/test6")
@ResponseBody
public String test6(HttpServletRequest request,
//@RequestParam("datas[]") Integer[] ids
//@RequestParam("datas[]") Set<Integer> ids
@RequestParam("datas[]") List<Integer> ids
) throws Exception{
//System.out.println(ids.length);
System.out.println(ids.size());
return "test6 success";
}
@RequestMapping("/test7")
@ResponseBody
public String test7(HttpServletRequest request, @RequestBody Map<String,Integer> map) throws Exception{
System.out.println(map);
return "test7 success";
}
/*
对于复杂参数,将其封装在一个对象中
前端将数据转化为json形式,传送到后端的controller
controller层用@RequestBody接收
*/
@RequestMapping(value = "/testdemo")
@ResponseBody
public String testdemo(HttpServletRequest request,
@RequestBody Account account
) throws Exception{
System.out.println(account.getMessage());
System.out.println(account.getUser1());
System.out.println(account.getUser2s());
System.out.println(account.getStringList());
System.out.println(account.getStringArray());
System.out.println(account.getIntegerSet());
return "testdemo success";
}
}
js的代码
$(function() {
$("#test1btn").click(function () {
$.ajax({
type:"post",
url:path+"/user1/test1.do",
data : {"username" : "小明"},
contentType : "application/x-www-form-urlencoded",
success:function(data){
alert(data);
},
error: function(){
alert("test1 error");
}
});
});
$("#test2btn").click(function () {
$.ajax({
type:"post",
url:path+"/user1/test2.do",
data : {"username" : "小明"},
contentType : "application/x-www-form-urlencoded",
success:function(data){
alert(data);
},
error: function(){
alert("test2 error");
}
});
});
$("#test3btn").click(function () {
$.ajax({
type:"post",
url:path+"/user1/test3.do",
data : {
"username" : "小明",
"password" : "123456"
},
contentType : "application/x-www-form-urlencoded",
success:function(data){
alert(data);
},
error: function(){
alert("test3 error");
}
});
});
$("#test4btn").click(function () {
var test4Data=[1,2,3];
var test4_json_data = JSON.stringify(test4Data);
$.ajax({
type:"post",//只能是post
url:path+"/user1/test4.do",
data : test4_json_data,
contentType : "application/json",
success:function(data){
alert(data);
},
error: function(){
alert("test4 error");
}
});
});
$("#test5btn").click(function () {
var test5Data=['哈1','哈2','哈3'];
$.ajax({
type:"post",//或get
url:path+"/user1/test5.do",
data : {"datas" : test5Data},//或{"datas[]" : test5Data},推荐带上[],controller的@RequestParam不能省略[]
success:function(data){
alert(data);
},
error: function(){
alert("test5 error");
}
});
});
$("#test6btn").click(function () {
var test6Data=[1,2,3,3,3,3];
$.ajax({
type:"post",//或get
url:path+"/user1/test6.do",
data : {"datas[]" : test6Data.join()},//join不带参数则以,作为分隔符,防止数组为空时出错
success:function(data){
alert(data);
},
error: function(){
alert("test6 error");
}
});
});
$("#test7btn").click(function () {
/*
var namevalue = "小明",passvalue = "123456";
var test7Data = '{"name" : "'+namevalue+'" ,'+
' "pass" : "'+passvalue+'"}';
*/
var value1 = 1,value2 = 2;
var test7Data = '{"key1" : '+value1+' ,'+
' "key2" : '+value2+'}';
$.ajax({
type:"post",//或get
url:path+"/user1/test7.do",
contentType : 'application/json',
data : test7Data,
success:function(data){
alert(data);
},
error: function(){
alert("test7 error");
}
});
});
$("#testdemobtn").click(function () {
var messagedata = '你好';
var user1data = {
'id' : 1,
'username' : '小明',
'password' : '123456'
};
var user2sdata = [
{
'sex' : '男'
},
{
'sex' : '女'
}
];
var stringListdata = ['哈1','哈2','哈3'];
var stringArraydata = ['哈1','哈2','哈3'];
var stringArraydata = ['哈1','哈2','哈3'];
var integerSetdata = [1,1,2,2,3,3,4];
var mapdata = '{"我是key1" : "我是value1" , ' +
' "我是key2" : "我是value2" ,' +
' "我是key3" : "我是value3"}'
var data = {
'message' : messagedata,
'user1' : user1data,
'user2s' : user2sdata,
'stringList' : stringListdata,
'stringArray' : stringArraydata,
'integerSet' : integerSetdata,
'map' : mapdata
};
$.ajax({
type : 'post',//或get
url : path + '/user1/testdemo.do',
contentType : 'application/json;charset=UTF-8',
data : JSON.stringify(data),
success:function(data){
alert(data);
},
error: function(){
alert("testdemo error");
}
});
});
})
/*
window.operateEvents={
"click #editBtn": function (e, value, row, index) {
$.ajax({
type:"post",
url:path+"/user1/edit.do",
data : {"id" : row.id},
dataType : "json",
contentType : "application/x-www-form-urlencoded",
success:function(data){
$("#myformedit_id").attr("value",data.id);
$("#myformedit_username").attr("value",data.username);
$("#myformedit_password").attr("value",data.password);
},
error: function(){
alert("error");
}
});
$("#editsubmit").click(function () {
$.ajax({
type:"post",
url:path+"/user1/update.do",
data : $("#myformedit").serialize(),
contentType : "application/x-www-form-urlencoded",
success:function(data){
$("#dataTable").bootstrapTable("refresh");
alert("update success");
},
error: function(){
alert("update error");
}
});
});
}
}
//ajax的dataType尽量别用,就在bootstraptable里用一下
$(function() {
initTable();
$("#addBtn").click(function () {
$("#addsubmit").click(function () {
$.ajax({
type:"post",
url:path+"/user1/add.do",
data : $("#myformadd").serialize(),
contentType : "application/x-www-form-urlencoded",
success:function(data){
$("#dataTable").bootstrapTable("refresh");
alert("add success");
},
error: function(){
alert("add error");
}
});
});
});
$("#delOneBtn").click(function () {
var rows = $("#dataTable").bootstrapTable('getSelections');
var id;
if (rows.length == 0){
alert("必须选择数据");
return;
}
if (rows.length >= 2){
alert("只能选择一条删除");
return;
}
else {
id = rows[0]["id"];
}
//alert(id);
$.ajax({
type:"post",
url:path+"/user1/delone.do",
data : {"id" : id},
contentType : "application/x-www-form-urlencoded",
success:function(data){
$("#dataTable").bootstrapTable("refresh");
alert("delone success");
},
error: function(){
alert("delone error");
}
});
});
$("#delManyBtn").click(function () {
var rows = $("#dataTable").bootstrapTable('getSelections');
var ids = [];
if (rows.length == 0){
alert("请至少选择一条要删除的记录!");
return;
}
else {
$(rows).each(function () {
ids.push(this.id);
});
}
$.ajax({
type:"post",
url:path+"/user1/delmany.do",
contentType : "application/json;charset=UTF-8",
data : JSON.stringify(ids),
success:function(data){
$("#dataTable").bootstrapTable("refresh");
alert("delmany success");
},
error: function(){
alert("delmany error");
}
});
});
});
var tablecolumns=[
{
checkbox: true
},
{
field : "id",
title : "主键",
align : "center"
},
{
field : "username",
title : "姓名",
align : "center"
},
{
field : "password",
title : "密码",
align : "center"
},
{
field : "operate",
title : "操作",
align : "center",
events : operateEvents,
formatter : addFunctionalty
}
];
function initTable(){
$("#dataTable").bootstrapTable('destroy');//清空表的内容
//生成新表
$("#dataTable").bootstrapTable({
url: path+"/user1/findAll.do", //请求后台的URL
method: "post", //请求方式
contentType : "application/x-www-form-urlencoded",//处理post请求
//toolbar: '#toolbar', //工具按钮用哪个容器
striped: true, //是否显示行间隔色
cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
pagination: true, //是否显示分页(*)
//sortable: true, //是否启用排序,也可以单独加在字段上面
sidePagination: "client", //分页方式:client客户端分页,server服务端分页(*)
pageNumber: 1, //初始化加载第一页,默认第一页,并记录
pageSize: 10, //每页的记录行数(*)
pageList: [5, 10, 20, 50], //可供选择的每页的行数(*)
search: true, //是否显示表格搜索
strictSearch: true, //设置为 true启用全匹配搜索,否则为模糊搜索。
showColumns: true, //是否显示所有的列(选择显示的列)
showRefresh: true, //是否显示刷新按钮
minimumCountColumns: 2, //最少允许的列数
clickToSelect: true, //是否启用点击选中行
//height: 500, //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度
uniqueId: "id", //每一行的唯一标识,一般为主键列
showToggle: true, //是否显示详细视图和列表视图的切换按钮
cardView: false, //是否显示详细视图
detailView: false, //是否显示父子表
columns: tablecolumns //引入定义的列
});
}
function addFunctionalty(value, row, index){
return [
"<button id = 'editBtn' class = 'btn btn-primary btn-lg' data-toggle='modal' data-target='#myEditFormModal'>编辑</button>"
].join("");
}
*/
添加注释的为bootstraptable的简单实现,有兴趣的也可以研究一下,不难。
jsp的就比较简单了,添加几个按钮就行了,自己实现。
User1.java
package entity;
import lombok.Data;
@Data
public class User1 {
private Integer id;
private String username;
private String password;
}
User2.java
package entity;
import lombok.Data;
@Data
public class User2 {
private String sex;
}
Account.java
package entity;
import lombok.Data;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Data
public class Account {
private String message;
private User1 user1;
private List<User2> user2s;
private List<String> stringList;
private String[] stringArray;
private Set<Integer> integerSet;
}
简单总结
除了map参数,别的都没必要将前端需要传输的数据转化为json形式并传输到controller层
如果传输map数据,那就只能传输一个map数据,不能携带别的数据;除非将map数据封装到一个对象中
可以将多种类型的数据封装到对象中传输(map除外)
基本就这样吧,有不懂的可以问我,算是总结的比较全了。