Последовательность сегмента пути к массиву 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 дает хороший обзор.