猿问

Jersey/REST:在不重复代码的情况下将请求委托给不同的子资源?

我们创建了一个资源,例如:


@Path("whatever")

public class WhateverResource {


@POST

public Response createWhatever(CreateBean bean) { ...


@DELETE

@Path("/{uuid}")

public void deleteWhatever(@PathParam("uuid") UUID uuid) { ...

等等 GET、PUT、HEAD。


现在我们认为我们认为我们需要检查底层功能是否实际启用。一次检查,当它失败时,所有操作都应该简单地导致 501。


我的第一个想法是复制现有资源,例如:


@Path("whatever")

public class WhateverResourceIsntAvailable {


@POST

public Response createWhatever(CreateBean bean) { 

  throw 501


@DELETE

@Path("/{uuid}")

public void deleteWhatever(@PathParam("uuid") UUID uuid) { 

  throw 501

因此,两个资源都指定了完全相同的操作。导致我们无法(轻松)在需要注册资源的时间点调用该检查的问题。


除此之外,这种重复看起来不是很优雅,我想知道是否有一种“更规范”的方法来解决这个问题?


编辑:另一种选择是将检查添加到现有资源中,添加到每个资源中,但这意味着:对每个操作进行检查。添加新操作时很容易忘记这一点。


我设想有这样的事情:

  • 一个“基础资源”,被注册

  • 当对该资源调用任何操作时,该请求应该被“委托”,具体取决于该底层功能

  • 要么是一个总是给 501 的资源

  • 或执行真正工作的“真实”资源

理想情况下,无需重复检查代码或重复操作端点规范。


幕布斯7119047
浏览 129回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答