用过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的方法有两种:

  1. {"user.username":"xxxx","user.password":"xxxx"}

    前端传这样的数据过来,而且action中有setUser(User user)方法就可以了

  2. {"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的方法

  1. JSON.stringify(json)
  2. $.parseJSON(json)

第一个方法是将json对象转为json字符串,也就是转义的过程

第二个方法是将json字符串转为json对象,也就是去除转义的过程

传给后台的json字符串不能有过多的转义符,不然是无法去除转义的,更无法解析

当struts遇上json,没爱了的更多相关文章

  1. 谁还没遇上过NoClassDefFoundError咋地——浅谈字节码生成与热部署

    谁还没遇上过NoClassDefFoundError咋地--浅谈字节码生成与热部署 前言 在Java程序员的世界里,NoClassDefFoundError是一类相当令人厌恶的错误,因为这类错误通常非 ...

  2. 前端遇上Go: 静态资源增量更新的新实践

    前端遇上Go: 静态资源增量更新的新实践https://mp.weixin.qq.com/s/hCqQW1F8FngPPGZAisAWUg 前端遇上Go: 静态资源增量更新的新实践 原创: 洋河 美团 ...

  3. 对json的爱恨情仇

    本文回想了对json的爱恨情仇. C++有风险,使用需慎重. 本文相关代码在:http://download.csdn.net/detail/baihacker/7862785 当中的測试数据不在里面 ...

  4. 当创业遇上O2O,新一批死亡名单,看完震惊了!

    当创业遇上O2O,故事就开始了,总投入1.6亿.半年开7家便利店.会员猛增至10万……2015半年过去后,很多故事在后面变成了一场创业“事故”,是模式错误还是烧钱过度?这些项目的失败能给国内创业者带来 ...

  5. 当KDS晶振遇上爱普生晶振国内生产厂家该如何抉择?

    当KDS晶振遇上爱普生晶振国内生产厂家该如何抉择?       全球做晶振行业的公司有很多,单说深圳一个城市就有几十上百家正规的晶振厂家,深圳市金洛电子就是其中之一.我们不光代理日本和台湾多家排得上名 ...

  6. Android 自定义 ListView 显示网络上 JSON 格式歌曲列表

    本文内容 环境 项目结构 演示自定义 ListView 显示网络上 JSON 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章,没有源代码可下载,根据文中提供的代码片段,自己新建的项目(比较可恶 ...

  7. 当Java代码遇上抽象、重载加重写,一切都不美好了

    当Java代码遇上抽象.重载加重写.一切都不美好了 前几天调程序遇上个奇怪的bug.一直没找到问题,今天最终发现问题所在了,不说了先上代码(下面代码是演示样例代码,经測试,Java不存在这问题,安卓存 ...

  8. 有奖试读&征文--当青春遇上互联网,是否能点燃你的创业梦

    时至今日,互联网已经切入我们每一个人的工作.生活和学习的每一个角落.利用互联网这个工具,有人游戏,有人购物,有人上课,有人交友,而有那么一部分人去利用它完毕人生最完美的逆袭.相信每一个人心中都有个创业 ...

  9. 当 Go struct 遇上 Mutex

    struct 是我们写 Go 必然会用到的关键字, 不过当 struct 遇上一些比较特殊类型的时候, 你注意过你的程序是否正常吗 ? 一段代码 type URL struct { Ip string ...

随机推荐

  1. WebClient.DownloadFile(线程机制,异步下载文件)

    线程机制(避免卡屏),异步下载文件. 我做网站的监控,WebClient.DownloadFile这个方法是我经常用到的,必要的时候肯定是要从网上下载些什么(WebRequest 也可以下载网络文件, ...

  2. python2与python3在windows下共存

    python有python2(工业版)和python3,有时候我们会希望电脑上既有python2也有python3,!假设我们已经安装好,python2和python3了, 接下来我们找到python ...

  3. SQL Server的Execute As与连接池结合使用的测试

    简介     在SQL Server中,Execute As关键字允许当前账户在特定上下文中以另一个用户或登录名的身份执行SQL语句,比如用户张三有权限访问订单表,用户李四并没有权限访问订单表,那么给 ...

  4. Android入门(六)碎片

    原文链接:http://www.orlion.ga/493/ 一.碎片 碎片(Fragment)是一种可以嵌入在活动当中的 UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用的非常 ...

  5. 整理的一些PHP面试题目

    1.strlen()和mb_strlen()的作用分别是什么? strlen()和mb_strlen()的作用都是来获取字符串的长度,其中strlen()只针对单字节编码字符,也就是计算字符串的总字节 ...

  6. PHP上传实现进度条

    Web上传文件的三种解决方案

  7. C++笔记(3):一些C++的基础知识点

     前言: 找工作需要,最近看了下一些C++的基本概念,为范磊的<零起点学通C++>,以下是一些笔记. 内容: delete p;只是删除指针p指向内存区,并不是删除指针p,所以p还是可以用 ...

  8. 10个优秀的 HTML5 & CSS3 下拉菜单制作教程

    下拉菜单是一个很常见的效果,在网站设计中被广泛使用.通过使用下拉菜单,设计者不仅可以在网站设计中营造出色的视觉吸引力,但也可以为网站提供了一个有效的导航方案.使用 HTML5 和 CSS3 可以更容易 ...

  9. Java多线程读取大文件

    前言 今天是五一假期第一天,按理应该是快乐玩耍的日子,但是作为一个北漂到京师的开发人员,实在难想出去那玩耍.好玩的地方比较远,近处又感觉没意思.于是乎,闲着写篇文章,总结下昨天写的程序吧. 昨天下午朋 ...

  10. Azure China (11) 使用Azure China Storage Public Blob

    <Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China 注意:本文介绍的是Azure China Storage Publi ...