2015-11-05 2 views
1

Я пытаюсь использовать стандартный метод Link для построения динамических представлений для разных ресурсов/методов. @InjectLink аннотаций, который работает прекрасно для меняСсылка эквивалентна @InjectLink jersey

public class InjectLinkTest { 
    @InjectLink(resource = GraphResource.class, method = "getDataInterval", bindings = { @Binding(name = "dataid", value = "${instance.id}"), @Binding(name = "interval", value = "day") }, condition = "${instance.id != null}") 
    public URI day; 
    // ... 
} 

Это создает относительную ссылку на ресурс и метод, как ожидалось: /myresource/graphs/3/day Теперь я хочу сделать эквивалент того, что с более стандартным методом с использованием Jax -rs»по умолчанию Link:

public class StandardLinkTest { 
    public URI day = Link.fromMethod(GraphResource.class, "getDataInterval").build(this.id, "day").getUri(); 
    // ... 
} 

Я попытался это с различными вариантами (создание базы URI приложения вручную, и т.д.), но по какой-то причине он никогда не возвращает правильный URI для меня. Все, что я получаю, это 3/day или http://localhost:8080/3/day, который не является полным (глобальным) путем представления ресурсов и методов, но путь, видимый с места, где ссылка построена на, т.е. я пытаюсь получить путь внутри объекта это /myresource/graphs возврат. Как получить эквивалентный путь к аннотации @InjectLink со стандартным компоновщиком Jax-RS без использования жестко заданных частей пути? Для справки, правильный полный путь к целевому ресурсу будет http://localhost:8080/myresource/graphs/3/day.

ответ

1

Ожидаемое поведение: «Обратите внимание, что URI-ссылка, переданная экземпляру Link.Builder, возвращаемая этим методом, относительна». (http://docs.oracle.com/javaee/7/api/javax/ws/rs/core/Link.html)

Одна из возможностей - использовать UriBuilder с/в качестве basePath.

UriBuilder.fromPath("/").path(GraphResource.class, "getDataInterval").build(this.id, "day").getUri(); 

извещение: если вы заинтересованы в создании безопасно ссылки во время компиляции, смотрите здесь: https://github.com/upsource/jersey-linking/ использование (Java-8):

@Inject 
private Linker linker; 
... 
linker.link(GraphResource.class, (o) -> o.getDataInterval(this.id, "day")); 
+0

Спасибо за тот великий ответ! Именно то, что я искал! – PureSpider

Смежные вопросы