Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Erro 404 ao fazer request para location retornado no post

Após fazer Post, confirmar status 201 como resposta e obter o Location, é gerado uma exception de not found ao fazer um request para o location retornado no Post.

    @Test
    public void testaQueSuportaNovosCarrinhos() {
        Carrinho carrinho = new Carrinho();
        carrinho.setCidade("Sao Paulo");
        carrinho.setRua("Rua Vergueiro");
        carrinho.adiciona( new Produto(314L, "Tablet", 37, 1));

        String xml = carrinho.toXML();

        Entity<String> entity = Entity.entity( xml, MediaType.APPLICATION_XML );

        Client cliente = ClientBuilder.newClient();
        WebTarget target = cliente.target("http://localhost:8080");
        Response resposta = target.path("/carrinhos").request().post(entity);

        Assert.assertEquals( 201, resposta.getStatus() );

        String location = resposta.getHeaderString("Location");
        String conteudo = cliente.target(location).request().get(String.class);

        Assert.assertTrue(conteudo.contains("Tablet"));

    }
6 respostas

Fala Fabiano, tudo bem ?

Como está vindo essa location ? Como está essa String ?

Opa, tranquilo Rafael!

Assim está a variável string location: http://localhost:8080/carrinho/2

Opa Fabiano,

Tente fazer um teste ..

    Client cliente = ClientBuilder.newClient();
    WebTarget target = cliente.target("http://localhost:8080");


    Response resposta = target.path("/carrinhos").request().post(entity);

    String location = resposta.getHeaderString("Location");
    String pathToRedirect = location.substring(21);

    String conteudo = target.path(pathToRedirect).request().get(String.class);
    ...

Dê uma olhada como está sendo feita a request da outra forma .. aparentemente ele está montando de uma forma errada.

Rafael, tive essa exception:

Caused by: java.lang.IllegalArgumentException: URI is not absolute at java.net.URI.toURL(Unknown Source) at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.java:212) at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:182) at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:227)

solução!

Fala Fabiano, tudo bem ?

Agora que eu percebi, o location esta com a uri /carrinho/2 .. mas creio que seu controller está mapeado com /carrinhos (como dá pra ver na primeira requisição feita no teste).

Imagino que o location deveria retornar /carrinhos/2. Dê uma olhada no redirect que a action retorna.

Abraço!

Rafael, na mosca!

Obrigado .

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software