2016-12-09 87 views
0

我想創建一個寧靜的服務,我試圖消費我的JSON響應並將其轉換回對象。Grails消費JSON響應。

控制方法

def mergeVendors(String region) { 

    def report = new VendorReport(); 
    //do something with report 

    response.status = 201 
    response ([vendorReport: report]) as JSON 
} 

測試方法

void "Test Merge Vendors"() { 
    when:  
    controller.request.method = 'POST' 
    controller.request.json = '[{id:1, zip:"14224"}]' 

    controller.mergeVendors("Florida") 

    def response = controller.response 


    then: 
    response.zip == "14224" 
} 

上面的代碼是什麼,我試圖用我得到下面的異常。如何將響應轉換回VendorReport obj?

groovy.lang.MissingMethodException:方法的無簽名:org.healthresearch.VendorController.response()是適用於參數類型:(java.util.LinkedHashMap中)的值:[[vendorReport:[email protected] ]] 可能的解決方案:響應(java.lang.Object),getResponse(),響應(java.lang.Object,java.util.Map),響應(java.util.Map,java.lang.Object),respondsTo (java.lang.String中),respondsTo(java.lang.String中,[Ljava.lang.Object)

回答

3
response ([vendorReport: report]) as JSON 

變化到

render ([vendorReport: report]) as JSON 
+0

在我的測試中,我需要做什麼才能將json轉換回供應商報告對象? –

+0

'then:response.json == report' – zfChaos

+0

then:\t def response = controller.response.json; 迴應==報告 測試合併供應商(org.VendorControllerIntegrationSpec) | org.codehaus.groovy.grails.web.converters.exceptions.ConverterException:錯誤解析JSON \t在grails.converters.JSON.parse(JSON.java:278) \t在org.VendorControllerIntegrationSpec.Test合併供應商(VendorControllerIntegrationSpec。 groovy:32) 引起人:org.codehaus.groovy.grails.web.json.JSONException:在['vendorReport'的字符16處預期爲','或']':[email protected]] \t在grails.converters.JSON.parse(JSON.java:269) \t ... 1更多 –