2016-03-31 40 views
0

我在我的Spring Boot服务器中使用Katharsis库来自动构建JSON-API接口。Katharsis Json Api限制PATCH

比方说,我有一个端点(资源)/资源,我想提供POST方法(创建新资源)但限制PATCH(限制资源更新)。 同时,io.katharsis.repository.ResourceRepository仅提供save()方法,该方法适用于POST和PATCH。

我现在唯一的想法是将另一个Filter添加到FilterChain,它将禁止PATCHing所需的端点。

有没有更好的(即更短或更优雅)的方式来实现这一目标?

回答

0

要禁用PATCH方法,你应该遵循的步骤:

  1. 检查是否在数据库中不存在与ID对象请求的URL提供
  2. 如果对象存在,抛出UnsupportedOperationException
+0

感谢您的提示!这是JsonApi以某种方式推荐的方式吗?我的疑问是:为什么我要问数据库?我知道PATCH根本不受支持,不管数据库中有什么。所以,这听起来像一个额外的数据库调用,可以跳过,对吗?在再次阅读我的问题之后 - 也许这还不够清楚,我会纠正它。 – ppi

+0

另外,即使是一个简短的解释,我也会非常感激,为什么这个解决方案比添加过滤器更好。提前致谢! – ppi

+0

如果您希望为所有请求禁用修补程序,则过滤器的使用将更为合适,并且我假设您不想这样做。考虑跳过第一步 - 在具有大量事务和请求的生产部署情况下,可能只有DB层知道该对象是否真的已经存在。这主要是为了数据的一致性。 – masterspambot

0

贴剂含有一个ID。
所以你可以检查ID!= null并抛出一个错误。
这样你就不需要检查数据库。
此解决方案假定您不在客户端上生成ID。

+0

谢谢,好主意。 在我们的API中,实际上允许同时使用 POST资源/ {id}和 PATCH资源/ {id}。 所以,正如你写的这一个不会工作。老实说,我留在过滤器(匹配每个PATCH /资源请求)解决方案,以便于数据库查询。 – ppi