2

我开始为现有的 JSF-webapp 实现一个 REST 层(使用 RESTEasy,带有 Jettison 提供程序)。由于 Java REST 层的教程非常基础(简单对象),我面临的问题是现有的 JPA 实体关系如何可以轻松地暴露给客户端/从客户端使用。一个简单的“/user” REST 方法已经成功地给了我下面的输出,这是一个好的开始。但我的主要问题是 - 如何处理这种结构。通过 REST 使用这种结构是否常见?

  1. 我不想公开所有细节或整个实体树,无论是因为不相关、节省流量还是安全问题。使用@XmlTransient 对于@Procudes 来说效果很好,但是在@POST/@PUT 上合并这些实体时,所有@XmlTransient 属性都会合并为NULL。这样做的正确方法是什么?
  2. 由于@XMLTransient 是一个全局和永久设置 - 动态决定我想要公开的实体树深度的正确方法是什么?

谢谢

用户实体的示例 JSON:

{
 "user": {
    "id": ..,
    "uuid": "1521ccad69ba4579bbe49e75181fefc1",
    "image": "",
    "contact": {
        "id": ..,
        "uuid": "8eb429dcca994834ae5c8cf07cba62a2",
        "cellphone": "",
        "city": "",
        "country": "",
        "email": "mail@foo.bar",
        "fax": "",
        "phone": 555,
        ...
    },
    "name": "...",
    "account": {
        "id": ...,
        "uuid": "80b331f9e6644449bb3600b0e5145253",
        "confirmed": true,
        "profile": {
            "id": ...,
            "uuid": "e172bdcafe2645d7975852ca5685c98c",
            "locale": "en",
            "notifyMessage": false,
            "notifyNews": true,
            "notifyTask": true,
            "timeZone": "Europe/Berlin"
        },
        "roleProfiles": {
            "id": ..,
            "uuid": "f1713758f3f2416faed3e68350f2d759",
            "active": true,
            "assemblies": [
                {
                    "id": ..,
                    "uuid": "13d72449833a4eb0b5b4f62c729ee44f",
                    "image": "",
                    "commercialRegisters": [
                        123,
                        456
                    ],
                    "contact": {
                        "id": ...,
                        "uuid": "bef3802297344e3c8c3619b6c91c345a",
                        "city": "",
                        "country": "",
                        ...
                    },

                    "thumbnail": ""
                },
                {
                   ...
                }
            ],               
        },
        "userName": "..."
    },

    "displayName": "...",
    "firstName": "Foo",
    "lastName": "Bar",
    "salutation": "",
        "title": ""
    }
}
4

1 回答 1

0

您的 Java 类中的 Hi 引用应作为链接而不是值序列化为 JSON。这就是 Spring REST 的做法。好处是:那样你有一种延迟加载 坏处是客户端需要额外的请求来获取引用的值。

我为此开发了一个完整的解决方案,但这是一项艰巨的工作。客户端(在 javascript 中)为这些引用创建代理并按需解析它们。

我在 demo.appdriver.com 上有一个演示。在右上角,您会看到一个链接“REST API”,单击它,您可以看到一个相当复杂的域模型的 REST API。

现在您可以开始点击用户界面,创建、更改、删​​除等,看看客户端和服务器之间的流量。

希望能帮助到你 !

于 2014-05-06T12:58:54.713 回答