Рестлет Маршрут же API с разными методами HTTP - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть 2 API следующим образом:

GET [baseURL]/user/{userID}
DELETE [baseURL]/user/{userID}

Как я могу правильно направить их на основе метода HTTP в рестлете?

Вот мой код, который не работает -

Для GET-

Router rootRouter = new Router(getContext());
rootRouter.attach("/user/{userID}", GetUserRest.class);
rootRouter.setDefaultMatchingMode(Template.MODE_STARTS_WITH);
rootRouter.setRoutingMode(Router.MODE_LAST_MATCH);

Для DELETE-

Router rootRouter = new Router(getContext());
rootRouter.attach("/user/{userID}", CancelUserRest.class);
rootRouter.setDefaultMatchingMode(Template.MODE_STARTS_WITH);
rootRouter.setRoutingMode(Router.MODE_LAST_MATCH);

Поскольку оба подключены с одним и тем же rootRouter и имеют одинаковый URL, так что restlet не знал, какой класс вызывать, еслиего ПОЛУЧИТЬ или УДАЛИТЬ.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Похоже, вы хотите сохранить реализацию GET и DELETE в отдельных классах, но присоединить их к одному и тому же шаблону URL в Router.Я видел ваш ответ, но подумайте и об этом решении, если кому-то нравится другой подход:

Я знаю 1 способ решения этой проблемы, сделайте 3 класса: User, UserGet и UserDel.

rootRouter.attach("/user/{userID}", User.class);

User.java

public class User
{   @Get
    public Object getImpl()
    {   UserGet userGet = new UserGet();
        // init userGet
        return userGet.createResponse();
    }
    @Delete
    public Object delImpl()
    {   UserDel userDel = new UserDel();
        // init userDel
        return userDel.createResponse();
    }
}

Надеюсь, это решение также отлично работает.

0 голосов
/ 28 ноября 2018

Вот решение -

Используйте одну и ту же маршрутизацию и один и тот же класс для обоих.Затем в классе положить аннотации для GET и POST.

public class GetUserRest extends ServerResource{
    @Get @Delete
    public String getUser() throws ResourceException {
      if(getMethod().getName().equals("DELETE")) {
            return "delete method";
        } else if(getMethod().getName().equals("GET")) {
            return "get method";
        }
    }

}
...