从java bean初始化json对象

时间:2012-02-27 04:04:36

标签: javascript json

我有以下要求 -

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

现在,通过这种方法,虽然客户端将数据作为从这个bean创建的json对象获得,这可能是合适的,但它也能够创建新的这样的对象。现在我对此有以下问题 -

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

通过Servlet动态生成的代理将包含创建服务器端对象的新客户端实例所需的javascript代码(使用Revealing 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'});