zoukankan      html  css  js  c++  java
  • 当struts遇上json,没爱了

    用过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字符串不能有过多的转义符,不然是无法去除转义的,更无法解析

  • 相关阅读:
    java timer 指定某时间点执行
    java jdbc 同时操作查询删除操作
    java ResultSet获得总行数
    c# 根据枚举Value 获得名称
    c# 备份数据
    MySQL主从集群搭建
    单机安装MySQL多实例
    2019年度总结
    go goroutine id
    go语言中 json转换--nil
  • 原文地址:https://www.cnblogs.com/wewill/p/5588743.html
Copyright © 2011-2022 走看看