Spring中form表单映射到Bean的限止:
* 1,form表单中的字段必须和Bean里的字段一样,或比bean里的字段少
* 2,form表单中的name和Bean的字段必须小写
由于以上限止,本人研究有一下方法解决demo如下
<div id="demo">
<form >
<input name="id"/>
<input name="name"/>
</form>
</div>
用FormData获取form的数据
new FormData($("#demo form")[0];
如果里面的数据有增加可以删除:
FormData用法:
FormData.delete("name")删除Key为name的数据
FormData.set("name","value")修改Key为name的值为value
FormData.append("name","value")增加Key为name的职位value
FormData.get("name")获取Key为name的值
FormData.has("name")判断该Key为name的值存不存在
用该方法把FormData对象序列化
function string_FormData(formData) {
var objData = {}
for (var entry of formData.entries()){
objData[entry[0]] = entry[1];
}
return JSON.stringify(objData);
};
前端用ajax发送该数据
var data = string_FormData(new FormData($("#demo form")[0])
$.ajax({
url: "../index/formAction.do",
type: "POST",
contentType : 'application/json;charset=utf-8', //设置请求头信息
dataType:"json",
data: data, //将Json对象序列化成Json字符串,toJSON()需要引用jquery.json.min.js
success: function(data){
alert(JSON.stringify(data));
},
error: function(res){
alert(res.responseText);
}
});
Bean:
import com.alibaba.fastjson.annotation.JSONField;
/**
* @JSONField(name="ID")
* 它的作用为把Bean中小写的属性,转换json的时候
* 把它转换为大写
**/
public class User {
private int id;
private String name;
@JSONField(name="ID")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@JSONField(name="NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
后端接收参数方法
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RequestBody;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature
@RequestMapping(value = "/formAction", method ={RequestMethod.POST})
@ResponseBody
public String formAction(@RequestBody List<User> users) throws Exception{
String result = "";
if(users == null || users.size() <= 0){
return "No any ID.中文";
}
/**
* 把对象转换为JSON,KEY为大写的字符串
**/
result = JSONObject.toJSONString(users.get(0), SerializerFeature.WriteMapNullValue);
return result;
}
以上就是结合FormData把form表单通过注解用Spring传到Bean的方法,并且随意转换为大小写的办法。