GWT

2010-10-21 20 views
16

'da POST isteklerini parametrelerle yapma Belirli bir URL'ye bir parametre kümesiyle POST isteğinde bulunmaya çalışıyorum. Sorun şu ki POST isteğinin yapıldığı, ancak hiçbir parametrenin geçmediği.GWT

RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, url); 

    StringBuilder sb = new StringBuilder(); 
    for (String k: parmsRequest.keySet()) { 
     String vx = URL.encodeComponent(parmsRequest.get(k)); 
     if (sb.length() > 0) { 
      sb.append("&"); 
     } 
     sb.append(k).append("=").append(vx); 
    } 

    try { 
     Request response = builder.sendRequest(sb.toString(), new RequestCallback() { 

      public void onError(Request request, Throwable exception) {} 

      public void onResponseReceived(Request request, Response response) {} 
     }); 
    } catch (RequestException e) {} 
} 

Ben mod GET kullanmak ve el isteğine sorgu dizesi eklerseniz, bu gayet güzel çalışıyor - ama büyük olabilir boyunca geçirilecek veri olarak POST kullanmak gerekir ....

cevap

24

Seti isteğinizin başlık:

builder.setHeader("Content-type", "application/x-www-form-urlencoded"); 
+1

Teşekkürler! Akseptör servletim çalışmıyordu .... bunun hakkında asla düşünmezdim! Teşekkürler! – Lenz

+0

Sevindim Yardımcı olabilirim! – z00bs

0

bir web formu GET ve POST bir karışımını kullanan bir sayfaya bir istek göndermek için kullanılamaz. Formun yöntemini GET olarak ayarlarsanız, tüm parametreler sorgu dizesinde bulunur. Formun yöntemini POST olarak ayarlarsanız, tüm parametreler istek gövdesindedir.

Kaynak: HTML 4.01 standart, bölüm 17.13 Form Gönderme url: Bu zaten çalışmalıdır http://www.w3.org/TR/html4/interact/forms.html#submit-format

1

- ama POST kullanırken, kendi Servlet farklı gönderilen verileri okumak gerekecek (ı varsayalım, sen' ? tabii

public class MyServlet extends HttpServlet { 

    @Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
        throws ServletException, IOException { 

     System.out.println(req.getReader().readLine()); 
    } 
} 

, kendi b req.getReader() veya req.getInputStream() içeriğini kopyalayabilirsiniz: sunucu tarafında Java kullanarak yeniden)

böyle bir Servlet ile deneyebiliriz uffer veya string vb.

0

Benim önerim: Parametre yaklaşımını bırakın.

Bunun yerine @RequestBody'yi kullanın. Daha temiz. @RequestParam, yalnızca dinlenme hizmetlerini hızlı bir şekilde test etmek için sunucuya GET isteği göndermek istiyorsanız kullanışlıdır. Herhangi bir karmaşıklık derecesine sahip verilerle uğraşıyorsanız, maksimum içerik sınırına sahip olmayan sunucuya POST isteklerini kullanmanız daha iyidir.

Sunucuya bir isteğin nasıl pompalanacağına dair bir örnek. NOT: Bu durumda, arka uç olarak springboot kullanıyorsanız, uygulama/json için içerik türünü kullanmanız gerekir.

private void invokeRestService() { 
     try { 
      // (a) prepare the JSON request to the server 
      RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, JSON_URL); 
      // Make content type compatible with expetations from SpringBoot 
      // rest web service 
      builder.setHeader("Content-Type", "application/json;charset=UTF-8"); 

      // (b) prepare the request object 
      UserLoginGwtRpcMessageOverlay jsonRequest = UserLoginGwtRpcMessageOverlay.create(); 
      jsonRequest.setUserName("John777"); 
      jsonRequest.setHashedPassword("lalal"); 
      String jsonRequestStr = JsonUtils.stringify(jsonRequest); 

      // (c) send an HTTP Json request 
      Request request = builder.sendRequest(jsonRequestStr, new RequestCallback() { 

       // (i) callback handler when there is an error 
       public void onError(Request request, Throwable exception) { 
        LOGGER.log(Level.SEVERE, "Couldn't retrieve JSON", exception); 
       } 

       // (ii) callback result on success 
       public void onResponseReceived(Request request, Response response) { 
        if (200 == response.getStatusCode()) { 
         UserLoginGwtRpcMessageOverlay responseOverlay = JsonUtils 
           .<UserLoginGwtRpcMessageOverlay>safeEval(response.getText()); 
         LOGGER.info("responseOverlay: " + responseOverlay.getUserName()); 
        } else { 
         LOGGER.log(Level.SEVERE, "Couldn't retrieve JSON (" + response.getStatusText() + ")"); 
        } 
       } 
      }); 
     } catch (RequestException e) { 
      LOGGER.log(Level.SEVERE, "Couldn't execute request ", e); 
     } 
    } 

Not UserLoginGwtRpcMessageOverlay bir yama iştir. Bu bir GwtRpc serializable nesnesi değil, gwt javascript nesnesini genişleten bir sınıftır.

Saygılarımızla.