spring3 mvc 接受json格式数据是转换报错.用注解方式@RequestBody
spring3 mvc 接受json格式数据是转换报错.用注解方式@RequestBody 将接受的json数据自动转换为java实体对象报错,转换不了. 点击新增 按钮 报错
org.codehaus.jackson.map.JsonMappingException: Unrecognized field "user" (Class com.springmvcext.pojo.Users), not marked as ignorable.
代码如下:
@Controller
@RequestMapping("/springMvcExt")
public class UserController {
private Logger logger = org.slf4j.LoggerFactory.getLogger(UserController.class);
@RequestMapping(value="/userManage",method=RequestMethod.POST)
@ResponseBody
public Map<String, Object> add(@RequestBody Users user) {
Map<String, Object> modelMap = new HashMap<String, Object>();
logger.info(" addUser: add ");
System.out.println("Users id is : "+user.getId());
System.out.println("Users name is : "+user.getUsername());
System.out.println("Users password is :"+user.getPassword());
modelMap.put("success", true);
return modelMap;
}
}
js 代码 ==========
Ext.onReady(function() {
// demoStroe
var demoStore = new Ext.data.JsonStore({
add : true,
remoteSort : true,
restful : true,
autoLoad : true,
idProperty : 'id',
root : 'user',
totalProperty : 'total',
fields : ['id', 'username', 'password'],
proxy : new Ext.data.HttpProxy({
restful : true,
url : 'springMvcExt/userManage'
// url : 'userManage'
}),
writer : new Ext.data.JsonWriter({
encode : false,
writeAllFields : true
}),
onCreate : function(values) {
var a = new this.recordType(values);
this.insert(0, a);
}
});
var demoGrid = new Ext.grid.GridPanel({
title : '测试demo',
id : 'demoGrid',
height : 150,
width : 400,
store : demoStore,
trackMouseOver : false,
disableSelection : true,
loadMask : true,
columns : [{
header : '编号',
dataIndex : 'id',
// hidden : true,
sortable : true
}, {
header : '名称',
dataIndex : 'username'
}, {
header : '密码',
dataIndex : 'password'
}],
viewConfig : {
forceFit : true
},
bbar : new Ext.PagingToolbar({
pageSize : 5,
store : demoStore,
displayInfo : true,
displayMsg : 'Displaying topics {0} - {1} of {2}',
emptyMsg : "No topics to display"
}),
sm : new Ext.grid.RowSelectionModel({
singleSelect : true,
listeners : {
rowselect : function(sm, row, rec) {
Ext.getCmp("demoForm").getForm()
.loadRecord(rec);
}
}
})
});
demoGrid.render('showUser');
console.debug(demoGrid.getStore());
// demoForm
var demoForm = new Ext.form.FormPanel({
id : 'demoForm',
restful : true,
labelWidth : 75,
frame : true,
title : 'demoForm',
bodyStyle : 'padding:20px 5px 0',
width : 400,
defaultType : 'textfield',
items : [{
fieldLabel : '编号',
xtype : "textfield",
id : 'id',
name : 'id',
allowBlank : false
}, {
fieldLabel : '名称',
xtype : "textfield",
id : 'username',
name : 'username'
}, {
fieldLabel : '密码',
xtype : "textfield",
id : 'password',
name : 'password'
}],
buttons : [{
text : '新建',
handler : function() {
var rec = demoForm.getForm().getValues();
demoStore.onCreate(rec);
},
scope : this
}, {
text : '更新',
handler : function() {
var grid = Ext.getCmp("demoGrid");
var ds = grid.getStore();
recode = grid.getSelectionModel().getSelected();
if (recode) {
demoForm.getForm().updateRecord(recode);
}
},
scope : this
}, {
text : '删除',
handler : function() {
var grid = Ext.getCmp("demoGrid");
var ds = grid.getStore();
recode = grid.getSelectionModel().getSelected();
var id;
if (recode) {
id = recode.data.id;
demoStore.remove(recode);
}
},
scope : this
}, {
text : '重置',
handler : function() {
Ext.getCmp("demoForm").getForm().reset()
},
scope : this
}]
});
demoForm.render(document.body);
});
=========================
public class Users implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private long id;
private String username;
private String password;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
[解决办法]
我告诉你怎么回事。
时间有点久了,不知道对你而言,这问题还有意义否
发生这个错误 Unrecognized field "user"
是因为spring3把json数据封装成VO来接收(值对象,就是你的那个bean)时,要求页面表单元素的名称和bean中的属性是一一对应的,即名称要相同。
user这个属性肯定是与页面的相关属性不同名,所以会报这个异常,比如页面上有个input叫"userperson",而你的类里属性叫user,就会报这个错。
另外还有一个问题,ajax发给sping3请求后,spring3在返回给前台json时,ajax不会执行回调函数(success),一直没搞明白怎么回事,不知道有人知道是怎么回事吗,怀疑是spring3在将返回值json化时,格式有问题。但还是不知道为什么没执行success()
[解决办法]
这个问题我也出现了,有两种方法可以解决,第一就是自已手动new ModelMap,第二种就是不用modelMap你用gson解析 。
@RequestMapping(value="addFundDeposit",method=RequestMethod.POST)
@ResponseBody
public ModelMap addFundDeposit(FundDeposit fundDeposit){
///1个人 2企业
ModelMap model=new ModelMap();
try {
//fundMutualDepositService.saveFundDao(fundDeposit);
model.addAttribute("success", true);
model.addAttribute("message", "社员借入成功!");
} catch (Exception e) {
model.addAttribute("message", "社员借入失败!");
Log.info("@@deposit failure memberNum"+fundDeposit.getMemberNum());
}
//try {
//
//fundMutualDepositService.saveFundDao(fundDeposit);
//
//model.addAttribute("success", true);
//model.addAttribute("message", "社员借入成功!");
//Gson gson=new Gson() ;
//String p=gson.toJson(model);
//
//} catch (IOException ioe) {
//ioe.printStackTrace();
//}catch(Exception e) {
//e.printStackTrace();
//}
return model;
}