Jax-RS Response.created (location) для маршрутов с параметрами пути - PullRequest
0 голосов
/ 12 октября 2018

У меня есть маршрут REST для создания ресурса, который использует параметры пути.

Ответ, данный здесь: https://stackoverflow.com/a/26094619/2436002 показывает, как легко создать правильный заголовок местоположения для ответа, используя контекст UriInfo.

@Path("/resource/{type}")
public class Resource {
    @POST
    public Response createResource(@PathParam("type") String type, @Context UriInfo uriInfo) 
    {
        UUID createdUUID = client.createResource(type);
        UriBuilder builder = uriInfo.getAbsolutePathBuilder();
        builder.path(createdUUID.toString());
        return Response.created(builder.build()).build();
    }
}

Однако сюда входят параметры пути в полученном URI, что не приведет к правильному ресурсу.

POST: http://localhost/api/resource/{type} с pathparam type = "system "

вернет http://localhost/api/resource/system/123 (123 является сгенерированным идентификатором), тогда как правильный URI будет http://localhost/api/resource/123

Итак, как я могу получить правильное расположение ресурса для возврата

1 Ответ

0 голосов
/ 12 октября 2018

Да, делая это так, как в ссылке, вы предполагаете родительские дочерние отношения, когда вы отправляете сообщение в конечную точку коллекции и создается дочерний отдельный ресурс.С вашим вариантом использования это не так.Один из способов заставить это работать - просто использовать UriBuilder.fromResource().Затем просто позвоните resolveTemplate(), чтобы ввести значение для "type".

URI createdUri = UriBuilder.fromResource(Resource.class)
       .resolveTemplate("type", createdUUID.toString()).build();
return Response.created(uri).build();

Это даст вам http://localhost/api/resource/123

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...