2010-05-12 24 views
9

Basit bir HTTP POST isteği oluşturmaya çalışıyorum ve neden aşağıdakilerin başarısız olduğunu bilmiyorum. here örneklerini denedim ve nerede yanlış gittiğimi göremiyorum.POST -> NullPointerException?

İstisna

java.lang.NullPointerException 
    at groovyx.net.http.HTTPBuilder$RequestConfigDelegate.setBody(HTTPBuilder.java:1131) 
    ... 

Kod Bu işleri

def List<String> search(String query, int maxResults) 
{ 
    def http = new HTTPBuilder("mywebsite") 

    http.request(POST) { 
     uri.path = '/search/' 
     body = [string1: "", query: "test"] 
     requestContentType = URLENC 

     headers.'User-Agent' = 'Mozilla/5.0 Ubuntu/8.10 Firefox/3.0.4' 

     response.success = { resp, InputStreamReader reader -> 
      assert resp.statusLine.statusCode == 200 

      String data = reader.readLines().join() 

      println data 
     } 
    } 
    [] 
} 

cevap

2

:

http.request(POST) { 
     uri.path = '/search/' 

     send URLENC, [string1: "", string2: "heroes"] 
19

Ben vücudu atamadan önce içerik türünü belirlemek için gerekli buluyoruz. Bu kullanarak, benim için çalışıyor 1.7.2 harika:

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.0') 
import groovyx.net.http.* 
import static groovyx.net.http.ContentType.* 
import static groovyx.net.http.Method.* 

def List<String> search(String query, int maxResults) 
{ 
    def http = new HTTPBuilder("mywebsite") 

    http.request(POST) { 
     uri.path = '/search/' 
     requestContentType = URLENC 
     headers.'User-Agent' = 'Mozilla/5.0 Ubuntu/8.10 Firefox/3.0.4' 
     body = [string1: "", query: "test"] 

     response.success = { resp, InputStreamReader reader -> 
      assert resp.statusLine.statusCode == 200 

      String data = reader.readLines().join() 

      println data 
     } 
    } 
    [] 
} 
+0

Bu sabit o benim için. "URLENC, [string1:" ", string2:" heroes "]' işlevlerini de kullanarak çalışacak, ancak HTTPBuilder ile alay ederken birim testini zorlaştırıyor. –

0

Eğer contentType JSON ile POST yürütmek ve karmaşık bir json verilerini geçirmek gerekirse, elle vücudunuzun dönüştürmeye çalışacağız:

def attributes = [a:[b:[c:[]]], d:[]] //Complex structure 
def http = new HTTPBuilder("your-url") 
http.auth.basic('user', 'pass') // Optional 
http.request (POST, ContentType.JSON) { req -> 
    uri.path = path 
    body = (attributes as JSON).toString() 
    response.success = { resp, json -> } 
    response.failure = { resp, json -> } 
}