当struts遇上json,没爱了两种struts自带的domain model方法用json传输数据到后台时,不能用domain model

用过struts的人,或者用过spring MVC的人,都知道domain model接受参数是多么的方便,而且又有依赖注入,简直是自动拿参数,再自动帮你转成java bean,但是也有不足的地方说说struts接收json数据的时候struts强大的面向对象的接受参数的格式是class User{ private String username; private String password; 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; } } 这个bean是一个常见的User类,有两个属性,username和password,并且有getter和setter方法两种struts自带的domain model方法Action中有一个User对象叫做user,想要struts得到前端的数据并自动转换成user的方法有两种:{"user.username":"xxxx","user.password":"xxxx"}前端传这样的数据过来,而且action中有setUser(User user)方法就可以了{"user":"xxxx","user":"xxxx"}也可以这样子传数据,在这里默认第一个value为username,第二个value为password 这个时候action中的setUser(User user)方法就要改成public void setUser(String username,String password){ //根据这两个参数生成user对象 }用json传输数据到后台时,不能用domain model 但是现在要求,要用json传数据到后台,上面两种虽然是Json的格式,但是并不是面向对象的json如果想改成正确的json,比如:{ "user": "{ "username": "xxxx", "password": "xxxxx" }" }  这时候,struts的domain model是不起作用的 因为用struts注入的话,后台收到的格式应该是"变量名.字段名":"值",这样子才能正确赋值而用正确的json传输的话,后台收到的是"变量名[字段名]":"值" 今天纠结了好久,想到了一个解决方法Action里面的setUser()需要改成 public setUser(String json){ //这里将json字符串解析成User对象 } 需要注意的是,这个方法里面,收到的参数json应该是这样的格式{ //正确的 "username": "xxxx", "password": "xxxxx" } 而不能是这{ //错误的,fasterjson中的parseObject(String json,Class class)是无法解析的 "user": { "username": "xxxx", "password": "xxxxx" } }所以前端送过来的json的最外层,首先要有个key,对应着action的一个需要接收json并解析成bean的成员名称, 并且这个key的value是个json字符串,value的最外层放着,这个bean的字段 说说前端送数据给后台的时候JS里面有两个关于json的方法JSON.stringify(json)$.parseJSON(json)第一个方法是将json对象转为json字符串,也就是转义的过程第二个方法是将json字符串转为json对象,也就是去除转义的过程传给后台的json字符串不能有过多的转义符,不然是无法去除转义的,更无法解析

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP在线

开发常用知识点

php允许传递任意个参数: function getArg($a="",$b=""){ echo "one:".$a."<br/>"; echo "two"...

424140
来自专栏服务端技术杂谈

Golang包

所有可执行的Go程序都必须包含一个main函数,作为程序运行的入口,main函数放在main包中。

23430
来自专栏黑泽君的专栏

动态代理详解

动态代理它可以直接给某一个目标对象生成一个代理对象,而不需要代理类存在。     动态代理与代理模式原理是一样的,只是它没有具体的代理类,直接通过反射生成了一...

9720
来自专栏C/C++基础

C++中关于main函数的几点说明

main函数是C++程序的入口函数,C++标准要求main()函数的返回值类型为int。

11220
来自专栏对角另一面

lodash源码分析之缓存方式的选择

每个人心里都有一团火,路过的人只看到烟。 ——《至爱梵高·星空之谜》 本文为读 lodash 源码的第八篇,后续文章会更新到这个仓库中,欢迎 star:po...

35990
来自专栏Small Code

Python中strptime的简单使用

strptime是python datetime库中的函数,用于将一个日期字符串转成datetime日期格式便于后期处理,使用格式为datetime.strpt...

25180
来自专栏IMWeb前端团队

Nodejs进阶:服务端字符编解码&乱码处理

本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载 写在前面 在web服务端开发中,字符的编解码几乎每天都要打交道。编解码一旦...

457100
来自专栏友弟技术工作室

bash脚本编程

21030
来自专栏程序员互动联盟

【答疑释惑】java中的全局变量

首先,java中是没有全局变量这个概念的,java程序中不能像C++那样在类外定义全局变量,因为JAVA当初出现的初衷就是为了安全性和跨平台性,所以去掉了类似C...

459110
来自专栏小灰灰

Java并发学习之synchronized使用小结

synchronized工作原理及使用小结 为确保共享变量不会出现并发问题,通常会对修改共享变量的代码块用synchronized加锁,确保同一时刻只有一个线...

25470

扫码关注云+社区

领取腾讯云代金券