假设我在/users
有一个API端点,在/cars
有另一个端点。当然,对其中任何一个的GET
请求都将获得所有用户或汽车。现在,GET /users/74/cars
应该返回属于用户74的所有汽车。
但是我的应用程序有很多与汽车相关的模型,而不仅仅是用户,因此存在更多的端点,如/shops/34/cars
和/mechanics/12/cars
。为简单起见,我希望所有PUT/PATCH
个请求都发送到主/cars
端点。
在执行保存时,Restangular将默认对加载项目的端点执行PUT
请求。但该端点不存在。
它还提供了一个很好的Restangular.setParentless(['cars'])
方法,它会丢弃网址的第一部分。但是,我不想在全球范围内这样做,而是专门针对特定元素。
最新的实际上是全局的,但是将其限制为特定方法,例如:Restangular.setParentless(['cars'], ['PUT'])
。
周围有类似的东西吗?还是我过度复杂了?
到目前为止,我尝试了一些我不喜欢的东西:
delete car.parentResource;
答案 0 :(得分:2)
我会推荐https://bugster.forgerock.org/jira/si/jira.issueviews:issue-html/OPENAM-7947/OPENAM-7947.html。自引用链接是一个链接,用于存储项目中应该用于<May 10, 2016 10:21:05 PM IST> <Error> <Deployer> <BEA-149205> <Failed to initia
lize the application "my-app-Snapshot" due to error web
logic.application.ModuleException: weblogic.management.DeploymentException: [HTT
P:101401]The url-pattern WSATCoordinator in web application my-app-Snapshot.war is mapped to multiple Servlets.
weblogic.application.ModuleException: weblogic.management.DeploymentException: [
HTTP:101401]The url-pattern WSATCoordinator in web application my-app-Snapshot.war is mapped to multiple Servlets.
at weblogic.application.internal.ExtensibleModuleWrapper.prepare(Extensi
bleModuleWrapper.java:114)
at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(Modu
leListenerInvoker.java:100)
at weblogic.application.internal.flow.ModuleStateDriver$1.next(ModuleSta
teDriver.java:196)
at weblogic.application.internal.flow.ModuleStateDriver$1.next(ModuleSta
teDriver.java:191)
at weblogic.application.utils.StateMachineDriver$ParallelChange.run(Stat
eMachineDriver.java:83)
Truncated. see log file for complete stacktrace
Caused By: weblogic.management.DeploymentException: [HTTP:101401]The url-pattern
WSATCoordinator in web application my-app-Snapshot.war
is mapped to multiple Servlets.
at weblogic.servlet.internal.WebAppServletContext.logAndThrowDeploymentE
xception(WebAppServletContext.java:1299)
at weblogic.servlet.internal.WebAppServletContext.registerServletMapping
(WebAppServletContext.java:1620)
at weblogic.servlet.internal.WebAppServletContext.registerServletMapping
s(WebAppServletContext.java:1497)
/ GET
/ PUT
等的路径,而不是用于拉取项目的URL。
示例,更新一个用户ID 74的车辆的里程数:
首先,配置Restangular以在每个对象上查找名为“self”的自我链接属性。
DELETE
接下来,打电话来接车。我假设您已经修改了API,以便在每个对象上返回一个名为“self”的属性,该对象具有指向其正确API端点的URL。
RestangularProvider.setRestangularFields({
selfLink: 'self'
});
我们想为其中一个添加一些里程,然后保存。整个Restangular代码看起来像:
GET /users/74/cars
[
{
"id": 12,
"model": "Camaro",
"make": "Chevrolet",
"year": 1969,
"color": "red",
"odometer": 67294,
"license": "ABC12345",
"self": "/cars/12"
},
{
"id": 14,
"model": "Gallardo",
"make": "Lamborghini",
"year": 2015,
"color": "black",
"odometer": 521,
"license": "XYZ34567",
"self": "/cars/14"
}
]
Restangular.one('users', 74).all('cars').getList().then(function(cars){
cars[1].odometer = 613;
cars[1].put();
});
将转到PUT
而不是/cars/14
。这对于像您这样的应用程序非常有用,它们将模型作为图形而不是严格的分层树。