2012-11-07 18 views
5

JSON olarak bir istek göndermek istiyorum ve denetleyicimde bu JSON'u ayrıştırmak ve istediğim parametreleri almak istiyorum.Grails JSON olarak istek göndermek ve denetleyicide ayrıştırmak

{"param1":"val1"} 

bu talebi ayrıştırmak ve "Param1" değeri elde etmek istiyoruz: Örneğin bu talebidir. Request.JSON kullandım ama hala null var. Bunu çözmek için başka bir yolu var mı?

sayesinde bu gibi UrlMappings içinde

+0

Sen 'uygulama/json' için isteğinizin contentType ayarlamalısınız. İsteğinizi nasıl gönderirsiniz? – aiolos

+0

Rest Client firefox extenstion kullanıyorum. Nasıl ayarlayabilirim? –

+0

İstek başlıklarında bir satır ekleyin: 'content-Type',' application/json'. Rest Client'ın İstek Başlıkları adlı bir tablosunun olduğunu görebiliyorum. –

cevap

2

Seti o: latest Grails guide yılında parseRequest için

static mappings = { 
    "/rest/myAction" (controller: "myController", action: "myAction", parseRequest: true) 
} 

arayın. Bu kıvrımla doğru çalışıp çalışmadığını

sonra doğrulamak:

curl --data '{"param1":"value1"}' --header "Content-Type: application/json" http://yourhost:8080/rest/myAction 
+0

Sorunum yok haritalama ile. { \t \t \t eylemi = [GET: "get"] \t \t}: Ben "/ $ denetleyici/olsun" (doğru parseRequest) kullanıyorum –

+0

@FerasOdeh benim Düzenlenen cevabı kontrol edin. –

+0

İstenmeyen istemciyi kullanarak jsonu parametre olarak nasıl gönderebilirim –

0

kontrol yönteminde, request.format kontrol edin. json belirtmelidir. Sanırım burada olmayacak, ama yükün nasıl yorumlandığına dair ipuçları verebilir. senin Config.groovy dosyasında

, aşağıdaki değerleri ayarlamak olacaktır:

grails.mime.file.extensions = false 
grails.mime.use.accept.header = false 

Aynı dosyada, sizin grails.mime.types kontrol edin. Muhtemelen olacak olan json: ['application/json', 'text/json'] içerdiğinden emin olun, ancak */*'un üzerine koyun. Bu girişler sırayla değerlendirilir (bu 2.1 öncesi sürümlerde doğruydu, havent 'şimdi oldu, ama ne olduğunu doğruladı]. Bununla bağlantılı olarak, belirtilen aiolos olarak, content-type başlığınızı yukarıdaki mime türlerinden birine ayarlayın.

Son olarak, kıvrımla test, Tomasz Kalkosiński başına veya istemci sayfanın en üst "Headers" tıklayın FF için RESTClient kullanmak (sol üst 4 tıklanabilir öğeleri olup; başlıklar biridir Yeni bir RESTClient'ten, "Custom Header" ı seçmeniz gerekebilir. Hatırlayamıyorum.

4

Eşyalarınızı test etmek için aşağıdakilerden birini kullanabilirsiniz (her iki seçenek de en sonunda otomatik test olarak tekrar kullanılabilir) birim ve entegrasyon): sunucuyu başlatmak için (gerek gibi kontrolör için

bir birim test yazmak):

void testConsume() { 
    request.json = '{param1: "val1"}' 
controller.consume()  
assert response.text == "val1" 
} 

ve en) (sizin controller.consume diyelim yaptığı bir şey gibi:

def consume() { 
    render request.JSON.param1 
} 

Yoksa konuşlanmış denetleyicinizdeki karşı bu kez bir çağrı yapmak Örneğin Jersey Client kullanabilirsiniz:

public void testRequest() { 
    // init the client 
    ClientConfig config = new DefaultClientConfig(); 
    Client client = Client.create(config); 

    // create a resource 
WebResource service = client.resource(UriBuilder.fromUri("your request url").build()); 
    // set content type and do a POST, which will accept a text/plain response as well 
    service.type(MediaType.APPLICATION_JSON).accept(MediaType.TEXT_PLAIN).put(Foo.class, foo); 
} 
İşte

@XmlRootElement 
public class Foo { 
    @XmlElement(name = "param1") 
    String param1; 

    public Foo(String val){param1 = val;}  
} 

çeşitli DİNLENME istekleri için Jersey istemcisi nasıl kullanılacağına ilişkin daha fazla örnek bulabilirsiniz: foo böyle bir foo olan

, 0 Denetleyiciniz otomatik/yayınlanmıştır JSON unmarshals ayrıştırır, böylecehttps://github.com/tavibolog/TodaySoftMag/blob/master/src/test/java/com/todaysoftmag/examples/rest/BookServiceTest.java

İlgili konular