首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

spring3 mvc 接受json格式数据是变换报错.用注解方式@RequestBody

2012-12-31 
spring3 mvc 接受json格式数据是转换报错.用注解方式@RequestBodyspring3 mvc 接受json格式数据是转换报错

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;

}

热点排行