Последовательность сегмента пути к массиву vararg в JAX-RS / Джерси?

JAX-RS/Jersey позволяет преобразовывать элементы пути URL в аргументы метода Java, используя @PathParam аннотаций.

Есть ли способ преобразовать неизвестное количество элементов пути в аргументы Java-метода vararg? И. е. /foo/bar/x/y/z следует перейти к методу: foo(@PathParam(...) String [] params) { ... } где params[0] является x, params[1] является y а также params[2] является z

Могу ли я сделать это в Джерси /JAX-RS или другим удобным способом?

1 ответ

Решение

Не уверен, что это именно то, что вы искали, но вы могли бы сделать что-то вроде этого.

@Path("/foo/bar/{other: .*}
public Response foo(@PathParam("other") VariableStrings vstrings) {
   String[] splitPath = vstrings.getSplitPath();
   ...
}

Где VariableStrings - это класс, который вы определяете.

public class VariableStrings {

   private String[] splitPath;

   public VariableStrings(String unparsedPath) {
     splitPath = unparsedPath.split("/");
   }
}

Обратите внимание, я не проверял этот код, так как он предназначен только для того, чтобы дать вам представление. Это работает, потому что VariableStrings могут быть введены из-за их конструктора, который принимает только String.

Проверьте документы.

Наконец, в качестве альтернативы использованию аннотации @PathParam для внедрения VariableString, вы можете вместо этого обернуть эту логику в свой собственный провайдер Jersey. Этот провайдер вводит "VariableStrings" более или менее таким же образом, как указано выше, но это может выглядеть немного чище. Нет необходимости в аннотации PathParam.

Coda Hale дает хороший обзор.

Другие вопросы по тегам