在 Restlet 中检索资源 ID

Retrieving resource id in Restlet

Restlet 等同于以下内容 我在 Jersey 中使用的代码片段:

  @GET
  @Path("{id}")
  @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON,MediaType.TEXT_XML})
  public Todo getEntityXMLOrJSON(@PathParam("id") int id)
  {
    ...
  }

我的意思是,在使用 Restlet 框架时,我会执行以下操作:

public class ContactsApplication extends Application {
    public Restlet createInboundRoot() {
        Router router = new Router(getContext());
        router.attach("/contacts/{contactId}", ContactServerResource.class);
        return router;
    }
}

如何在 get 方法中检索 contactId?

如果您在附加服务器资源时定义路径参数,您可以使用方法getAttribute在此服务器资源中访问它的值,如下所述:

public class ContactServerResource extends ServerResource {
    @Get
    public Contact getContact() {
        String contactId = getAttribute("contactId");
        (...)
    }
}

您会注意到您可以将此类元素定义为实例变量。以下代码是服务器资源ContactServerResource:

的典型实现
public class ContactServerResource extends ServerResource {
    private Contact contact;

    @Override
    protected void doInit() throws ResourceException {
        String contactId = getAttribute("contactId");
        // Load the contact from backend
        this.contact = (...)
        setExisting(this.contact != null);
    }

    @Get
    public Contact getContact() {
        return contact;
    }

    @Put
    public void updateContact(Contact contactToUpdate) {
       // Update the contact based on both contactToUpdate
       // and contact (that contains the contact id)
    }

    @Delete
    public void deleteContact() {
       // Delete the contact based on the variable "contact"
    }
}

希望对你有帮助, 蒂埃里