Consumir metodo DELETE no REST JAVA

Ola, tenho uma duvida quanto ao funcionamento do rest, na minha classe de consumo de api tenho somente 2 metodos chamados sendGet(url) e sendPost(url,json,METODO);

quando preciso fazer um get uso o sendGet e informo a url… até ai blz…

quando preciso fazer um post uso o sendPost e informo: url,json e “POST”;
percebi que o put também funciona nesse sendPost somente mudando o ultimo parametro para “PUT”.

porém o “DELETE” nao funciona no sendPost. Gostaria de saber se o metodo DELETE é obrigatório ser void, ou ele pode retornar algo igual ao post e put… Ou se tem algo de errado com meus métodos…

Segue abaixo o DELETE no WebService que criei com intuito de testar…

@DELETE
    @Path("Usuario/excluir/{login}")
    public Response excluir(@PathParam("login") String login) {
        return Response.ok().entity("soh teste").build();
    }

Abaixo meus metodos sendGet e sendPost

private String sendGet(String url_) {
        StringBuilder resposta = new StringBuilder();
        try {
            URL url = new URL(url_);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(5000);
            connection.connect();

            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
            String inputLine;

            while ((inputLine = in.readLine()) != null) {
                resposta.append(inputLine);
            }
            in.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        return resposta.toString();
    }

    public String sendPost(String url, String json, String metodo) {

        try {
            // Cria um objeto HttpURLConnection:
            HttpURLConnection request = (HttpURLConnection) new URL(url).openConnection();

            try {
                // Define que a conexão pode enviar informações e obtê-las de volta:
                request.setDoOutput(true);
                request.setDoInput(true);

                // Define o content-type:
                request.setRequestProperty("Content-Type", "application/json");
                // Define o tempo máximo
                request.setConnectTimeout(4000);

                // Define o método da requisição:
                request.setRequestMethod(metodo);

                // Conecta na URL:
                request.connect();

                // Escreve o objeto JSON usando o OutputStream da requisição:
                try (OutputStream outputStream = request.getOutputStream()) {
                    outputStream.write(json.getBytes("UTF-8"));
                }

                // Caso você queira usar o código HTTP para fazer alguma coisa, descomente esta linha.
                //int response = request.getResponseCode();
                return readResponse(request);
            } finally {
                request.disconnect();
            }
        } catch (IOException ex) {
            System.err.println(ex);
            return null;
        }
    }

private String readResponse(HttpURLConnection request) throws IOException {
        ByteArrayOutputStream os;
        try (InputStream is = request.getInputStream()) {
            os = new ByteArrayOutputStream();
            int b;
            while ((b = is.read()) != -1) {
                os.write(b);
            }
        }
        return new String(os.toByteArray());
    }

Bom se não estou enganado o delete retorna um código 200, que é sucesso ou erro que pode ser outro

Quando uso o meu metodo sendPost e altero para DELETE o ultimo parametro ele me da um erro… Ele não consegue ler o retorno como metodos PUT e POST, tem algo de errado com o metodo sendPost que utilizo?

posta o erro aqui,pra sabermos o que é. Qualquer coisa se tiver alguma dúvida de uma olhada neste artigo https://www.devmedia.com.br/rest-tutorial/28912

O erro gerado no sendPost(url,json,“DELETE”) é java.io.FileNotFoundException: http://localhost:9999/WebApplication1/webresources/test/Usuario/excluir

aparentemente o retorno é nullo. mesmo como você viu no webService esta com retorno Response.ok().entity(“soh teste”).build;

metodos POST e PUT retornam esse valor “soh teste” enquanto o DELETE não.

você usa é spring framework?

Não utilizo nenhum framework, desenvolvi o rest direto no netBeans usando como servidor o TomCat…

Consigo fazer tudo que preciso entre get,post,put… o delete não estou conseguindo achar meio de fazer funcionar…

Pode ser algo de errado com o método DELETE no WebService (primeiro código que escrevi la em cima)

Ou pode ter algo de errado com o meu método sendPost(url,json,parametro) (terceiro código la de cima)

Solucionado:

Alterei o método no WebService colocando uma tag @Consumes e retirando o @PathParam do método.

@DELETE
    @Consumes("application/json")
    @Path("Usuario/excluir/")
    public Response excluir(String login) {
        //faz as coisas
        return Response.ok().entity("algo").build();
    }

ok então se tiver mais dúvidas poste aqui