从javabean初始化json对象



我有以下要求-

我正在以压缩文件格式的形式从后端服务获取数据,我不希望我的UI客户端暴露在压缩文件格式中。为了解决这个问题,我计划为这个数据提供一个javabean表示,并在服务器端将适配器从这个压缩格式写入bean格式,反之亦然。此外,为了允许客户端的javascript对此进行操作,我计划使用像Jackson这样的库将这个bean转换为json。

现在,使用这种方法,虽然客户端将以从该bean创建的json对象的形式获取数据,这可能是合适的,但它也能够创建新的此类对象。现在我对此有以下问题-

  1. 这是一种有效的方法吗?还是需要改变
  2. 有没有一种方法可以在javascript中强制这个新的json对象初始化,使其具有可映射到此bean的所需结构,这样对bean结构的任何更改都不会提示我显式更改此json对象定义

在我看来,你的方法很好,所以没什么好说的。如果您希望能够在客户端创建JavaBean的新实例,同时保持它们与服务器端结构同步,那么您可以向客户端提供一个"代理"对象,用于创建新实例。这个由服务器动态生成的代理将始终能够创建客户端对象的正确实例,这些实例始终与服务器端对象同步。

示例(非常粗略,只是给你一个想法):

1) 为javabeans 包含服务器端生成的代理

    <script src="/server/url/mapped/to/servlet/ssproxy.js"></script>

通过Servlet动态生成的代理将包含创建服务器端对象的新客户端实例所需的javascript代码(此处使用Revearing Module Pattern):

2) ssproxy.js的内容(由服务器生成):

var server = {};
server.Proxy = (function(){
    function _extend( obj, additional ) {
       //copy properties from additional into obj
       //... I'll leave that to you...
    }
    function _createObject( config ) {
        var default = {
          attribute1:'',
          attribute2:''
        };
        //you can implement something
        //like jQuery extend() function here
        //to override default values with passed in args
        _extend( default, config );
        return default;
    }
    return {
        createObject: _createObject
    };
}());

你可以在需要的时候使用它来创建对象:

var newobj = server.Proxy.createObject({attribute1:'custom value'});

最新更新