Ответ 1
Я думаю, вы хотите сделать что-то вроде Response.created(createdURI).build()
. Это создаст ответ с 201 Created, при этом createdUri
будет значением заголовка местоположения. Обычно это делается с помощью POST. На стороне клиента вы можете вызвать Response.getLocation()
, который вернет новый URI.
-
public static Response.ResponseBuilder created(URI location)
- Создайте новый ResponseBuilder для созданного ресурса, установите заголовок местоположения, используя предоставленное значение. -
public abstract URI getLocation()
- возвращает URI местоположения, в противном случае - null, если не присутствует.
Помните о location
, который вы указываете методу created
:
URI нового ресурса. Если предоставлен относительный URI, он будет преобразован в абсолютный URI, разрешив его относительно URI запроса.
Если вы не хотите полагаться на пути статических ресурсов, вы можете получить текущий путь uri из класса UriInfo
. Вы могли бы сделать что-то вроде
@Path("/customers")
public class CustomerResource {
@POST
@Consumes(MediaType.APPLICATION_XML)
public Response createCustomer(Customer customer, @Context UriInfo uriInfo) {
int customerId = // create customer and get the resource id
UriBuilder builder = uriInfo.getAbsolutePathBuilder();
builder.path(Integer.toString(customerId));
return Response.created(builder.build()).build();
}
}
Это создало бы местоположение .../customers/1
(или что бы это ни было customerId
) и отправило его как заголовок ответа
Обратите внимание, что если вы хотите отправить объект вместе с ответом, вы можете просто прикрепить entity(Object)
к цепочке методов Response.ReponseBuilder