Как получить доступ к нескольким ресурсам в одном запросе: Джерси Отдых - PullRequest
0 голосов
/ 12 сентября 2011

Я пытаюсь найти хороший дизайн для следующего сценария.У меня есть служба отдыха POST, которой будет предоставлен массив услуг в качестве данных.И которые, в свою очередь, должны вызывать их один за другим для агрегирования результатов на сервере и отправки их обратно клиенту.

@Path("/resource1") @Path("/resource2") @Path("/collection")

Post data to /collection {["serviceName": "resource1", "data":"test1"], ["serviceName":"resource2","data":"test2"]}

Причина, по которой мне нужны ресурсы resource1 и resource2, заключается в том, что эти службы также можно назвать автономными.Я хочу использовать ту же настройку, если это возможно.Есть какой-либо способ сделать это.Я использую майку с пружиной.

1 Ответ

1 голос
/ 17 сентября 2011

Не уверен, что общего у этих ресурсов.Если метод post имеет одинаковую сигнатуру для всех из них, вы можете иметь абстрактный класс или интерфейс, который они реализуют, определяя метод post, и можете попробовать использовать ResourceContext.matchResource для этого.Например, что-то вроде этого:

public abstract class AbstractResource {
    public abstract String post(Object data);
}

@Path("/resource1")
public class Resource1 extends AbstractResource {
    @POST
    public String post(String data) {
        // do something
    }
}

@Path("/collection")
public class CollectionResource {
    @Context
    private ResourceContext rc;

    @POST
    @Consumes("application/json")
    public String post(List<PostRequest> postRequests) {
        StringBuilder result = new StringBuilder();
        for (PostRequest pr : postRequests) {
            // should wrap this in try-catch
            AbstractResource ar = rc.matchResource(pr.resource,
                    AbstractResource.class);
            sb.append(ar.post(pr.data));
        }
        return result.toString();
    }
}

@XmlRootElement
public class PostRequest {
    public String resource;
    public String data;
}

Надеюсь, у вас есть идея, и вы сможете поиграть с ней и настроить ее под свои нужды.

...