我开始为现有的 JSF-webapp 实现一个 REST 层(使用 RESTEasy,带有 Jettison 提供程序)。由于 Java REST 层的教程非常基础(简单对象),我面临的问题是现有的 JPA 实体关系如何可以轻松地暴露给客户端/从客户端使用。一个简单的“/user” REST 方法已经成功地给了我下面的输出,这是一个好的开始。但我的主要问题是 - 如何处理这种结构。通过 REST 使用这种结构是否常见?
- 我不想公开所有细节或整个实体树,无论是因为不相关、节省流量还是安全问题。使用@XmlTransient 对于@Procudes 来说效果很好,但是在@POST/@PUT 上合并这些实体时,所有@XmlTransient 属性都会合并为NULL。这样做的正确方法是什么?
- 由于@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": ""
}
}