JAVA

2013-10-11 20 views
9

'da HttpURLConnection içinde PUT, DELETE HTTP isteği nasıl gönderilir Restful WebServices'ım var ve POST ve GET HTTP isteğini gönderirim, JURA ile httpURLConection içinde PUT ve DELTE isteği HTTP'yi nasıl gönderirim.JAVA

+0

. Orada benzer kütüphanelerin bir listesini bulabilirsiniz. HttpURLConnection'ı doğal olarak kullanmak hantal ve hataya yatkındır. – hgoebl

cevap

23

Ben @BartekM gelen DELETE isteği kullanırsanız, bu durum almak

URL url = null; 
try { 
    url = new URL("http://localhost:8080/deleteservice"); 
} catch (MalformedURLException exception) { 
    exception.printStackTrace(); 
} 
HttpURLConnection httpURLConnection = null; 
try { 
    httpURLConnection = (HttpURLConnection) url.openConnection(); 
    httpURLConnection.setRequestProperty("Content-Type", 
       "application/x-www-form-urlencoded"); 
    httpURLConnection.setRequestMethod("DELETE"); 
    System.out.println(httpURLConnection.getResponseCode()); 
} catch (IOException exception) { 
    exception.printStackTrace(); 
} finally {   
    if (httpURLConnection != null) { 
     httpURLConnection.disconnect(); 
    } 
} 
+0

teşekkürler mükemmel !!! sadece yöntem DELETE gerekir. – user2816207

+0

htpURLConnection.connect() işlevini çağırmam gerekmez mi? Bu işlev ne için? –

-1

Eğer

protected void doPut(HttpServletRequest req, 
         HttpServletResponse resp) throws ServletException, IOException; 

HTTP PUT işlemini gerçekleştirir geçersiz kılabilir; varsayılan uygulama bir HTTP BAD_REQUEST hatasını bildirir. PUT işlemi, bir dosyasını FTP yoluyla göndermeye benzer. Bu yöntemi geçersiz kılan servlet yazarları, istekle birlikte gönderilen tüm Content- * başlıklarına saygı göstermelidir. (Bu başlıklar, içerik uzunluklu, içerik türü, içerik aktarım kodlama, içerik kodlama, içerik tabanı, içerik dili, içerik konumu, içerik konumu, içerik-MD5 ve içerik aralığı içerir.) Alt sınıf içerik başlığını onaylatamaz, sonra bir hata yanıtı (501) vermeli ve isteği atmalıdır. Daha fazla bilgi için, bkz. HTTP 1.1 RFC.

Bu yöntemin "güvenli" veya "idempotent" olması gerekmez. PUT aracılığıyla istenen işlemler, kullanıcısının sorumlu tutulabileceği yan etkilere sahip olabilir. Gerekli olmamakla birlikte, bu yöntemi geçersiz kılan servlet yazarları , etkilenen URI 'un geçici bir kopyasının bir kopyasını kaydetmek isteyebilir.

protected void doDelete(HttpServletRequest req, 
         HttpServletResponse resp) throws ServletException, IOException 

ve

HTTP silme işlemi gerçekleştirir; varsayılan uygulama bir HTTP BAD_REQUEST hatası rapor eder. DELETE işlemi, bir istemciye 'un bir URI'nin sunucudan kaldırılmasını istemesine izin verir. Bu yöntem "güvenli" veya "idempotent" olmak için 'a ihtiyaç duymaz. DELETE ile talep edilen işlemlerin, kullanıcıların sorumlu tutulabileceği yan etkileri olabilir. Gerekli olmamakla birlikte, bu yöntemi alt sınıfı kullanan servlet yazarları, , etkilenen URI'nin bir kopyasını geçici depolama biriminde saklamak isteyebilir.

java.net.ProtocolException: DELETE does not support writing 

, I bunu sadece düzeltmek için:

+0

Bunlar Servlet API'sı yöntemleridir, ancak OP bir HTTP istemcisini sorduğumu düşünüyorum –

+0

Belki de, doGet ve doPut'u yöneten ve diğer iki işlemi – RamonBoza

+0

olarak nasıl uygulayacağını öğrenmek isteyen bir sunucu uygulaması gerçekleştirdiğini anladım. Ben alıcı ve postT var, silme uygulamak ve yöntemleri koymak gerekir, ancak gelmez, çünkü tenngo bir giriş parametresi bana yardımcı olabilir? - @MatthewGilliard – user2816207

4

SİL

URL url = null; 
try { 
    url = new URL("http://localhost:8080/putservice"); 
} catch (MalformedURLException exception) { 
    exception.printStackTrace(); 
} 
HttpURLConnection httpURLConnection = null; 
DataOutputStream dataOutputStream = null; 
try { 
    httpURLConnection = (HttpURLConnection) url.openConnection(); 
    httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
    httpURLConnection.setRequestMethod("PUT"); 
    httpURLConnection.setDoInput(true); 
    httpURLConnection.setDoOutput(true); 
    dataOutputStream = new DataOutputStream(httpURLConnection.getOutputStream()); 
    dataOutputStream.write("hello"); 
} catch (IOException exception) { 
    exception.printStackTrace(); 
} finally { 
    if (dataOutputStream != null) { 
     try { 
      dataOutputStream.flush(); 
      dataOutputStream.close(); 
     } catch (IOException exception) { 
      exception.printStackTrace(); 
     } 
    } 
    if (httpsURLConnection != null) { 
     httpsURLConnection.disconnect(); 
    } 
} 

PUT bu talimatı kaldırın:

// httpURLConnection.setDoOutput(true); 

kaynak: adlı bir küçük kütüphane [DavidWebb] (https://github.com/hgoebl/DavidWebb) kullanabilir HttpURLConnection doğal kullanım için bir alternatif olarak Sending HTTP DELETE request in Android