Если вы только что использовали
@Path("foo/{bar}")
затем вызов /foo
приведет к 404, потому что /
является статическим и потребует запроса /foo/
. Но когда он находится в регулярном выражении bar
, это делает его необязательным. Итак, пример
@Path("foo{bar: (/[^/]+?)?}")
позволяет получить доступ к родительскому ресурсу и к подресурсу из того же метода ресурса. В качестве более реалистичного примера скажем, у вас есть
@Path("customers{id: (/[^/]+?)?}")
При этом у нас будет метод ресурса, который может обрабатывать как доступ к ресурсу коллекции , так и к одному ресурсу. В отличие от двух отдельных методов ресурсов, по одному для каждого случая. Например
@GET
@Path("customers{id: (/[^/]+?)?}")
public Response get(@PathParam("id") String id) {
if (id == null) {
return collection customers collection
} else {
fetch custom by id and return customer.
}
}
Это единственное реальное преимущество, которое я вижу в этой ситуации. Вероятно, потребуется больше контекста, возможно, некоторые документирующие комментарии автора относительно того, что они пытались достичь. В целом, хотя, IMO код выглядит излишне сложным.