2012-02-01 61 views
0

我遇到問題,將JQuery發送到我的服務器。我已經縮小的問題降到未正確設置在我的JavaScript,從而導致異常的數據字段:JQuery ajax/post - 在數據字段中設置JSON會導致JsonMappingException

org.codehaus.jackson.map.JsonMappingException:無法反序列化com.myserver的 實例。 rest.messages.dto.NewMessageDTO 出START_ARRAY令牌

的代碼工作,但不是很乾淨:

 $.ajax({ 
       type: "POST", 
       url: "../resources/messages/", 
       data: '{"subject": "' + subject + 
        '", "message": "' + message + 
        '", "messageType": "' + type + 
        '", "employeeIDs": [' + employeeIDs + 
        '], "assignmentIDs": [' + assignmentIDs +']}', 
       contentType: "application/json", 
       success: successHandler, 
       error: defaultErrorHandler 
      }); 

這使得給:

{ 「受試者」: 「測試」, 「消息」: 「測試」, 「爲messageType」: 「MESSAGE」, 「employeeIDs」:[461485], 「assignmentIDs」:[103 ]}

不起作用,但代碼更加清晰:

  $.ajax({ 
       type: "POST", 
       url: "../resources/messages/", 
       data: {'subject': subject, 'message': message, 'messageType': type, 'employeeIDs[]': employeeIDs, 'assignmentIDs[]': assignmentIDs}, 
       contentType: "application/json", 
       success: successHandler, 
       error: defaultErrorHandler 
      }); 

這是渲染爲application/X WWW的形式,進行了urlencoded因爲某些原因:

主題=測試&消息=測試&爲messageType = MESSAGE & employeeIDs%5B%5D = 461 & employeeIDs%5B%5D = 485 & assignmentIDs%5B%5D = 103

任何想法,我在做什麼這裏錯了嗎?在此先感謝您的幫助

回答

4

contentType: "application/json"表示您期待JSON作爲調用的結果。所有數據在發送前都是converted to a query string

不太乾淨的代碼將數據作爲JSON字符串發送,這顯然是../resources/messages/所期望的。

爲了讓更多的清潔,保持數據的JSON字符串:

$.ajax({ 
    'type': 'POST', 
    'url': '../resources/messages/', 
    'data': '{' + 
     "'subject':" + subject + ',' 
     "'message':" message + ',' 
     "'messageType':" type + ',' 
     "'employeeIDs':[" employeeIDs + '],' 
     "'assignmentIDs':[" assignmentIDs + ']' + 
    '}', 
    'contentType': "application/json", 
    'success': successHandler, 
    'error': defaultErrorHandler 
}); 

var data = { 
    'subject': subject, 
    'message': message, 
    'messageType': type, 
    'employeeIDs': employeeIDs[] 
    'assignmentIDs': assignmentIDs[] 
}; 
$.ajax({ 
    'type': 'POST', 
    'url': '../resources/messages/', 
    'data': JSON.stringify(data), //assuming you have the JSON library linked. 
    'contentType': "application/json", 
    'success': successHandler, 
    'error': defaultErrorHandler 
}); 

希望這有助於

皮特

+0

正準備接近完全相同的解決方案。這更清潔。 – 2012-02-01 21:57:26

+0

皮特 - 使用JSON.stringify工作!這比自己構建JSON字符串更清潔。感謝您的幫助 – 2012-02-01 22:08:25

+0

我確實必須刪除數據var中employeeIDs和assignmentID的[]。 IntelliJ給了我一個'表達期望'的錯誤。 – 2012-02-01 22:15:14

1

試試這個,它應該工作得很好,更乾淨。

 $.ajax({ 
      type: "POST", 
      url: "../resources/messages/", 
      data: { 
       subject: subject, 
       message: message, 
       messageType: type, 
       employeeIDs: employeeIDs, 
       assignmentIDs: assignmentIDs 
      }, 
      contentType: "application/json", 
      success: successHandler, 
      error: defaultErrorHandler 
     }); 

問題在代碼的第一部分,你被作爲一個字符串,它應該是一個鍵/值對每一個數據屬性發送整個數據。在第二部分中,您沒有爲陣列字段正確創建鍵名。數組字段不必包含[]

+0

不,這次沒工作。 employeeIDs和assignmentIDs都是數組,所以不知道如何處理轉換爲json – 2012-02-01 21:51:28

+0

爲什麼downvote ??? – ShankarSangoli 2012-02-01 21:54:07

+0

很抱歉,你的回答不起作用,我不希望其他讀者在錯誤的方向上引導 – 2012-02-01 22:11:25

0

數組是一個有點古怪,試試這個:

{'subject': subject, 'message': message, 'messageType': type, 'employeeIDs': employeeIDs, 'assignmentIDs': assignmentIDs} 

這假定employeeIDsassignmentIDs是數組。

這裏是一個演示:http://jsfiddle.net/jb6MA/

+0

我也試過,沒有運氣。它仍然將json轉換爲application/x-www-form-urlencoded – 2012-02-01 21:48:20

+0

然後,您可以在服務器端代碼中將其解碼爲對象。我使用PHP,在PHP中有一個'json_decode()'函數,它接受一個字符串並返回一個對象。 – Jasper 2012-02-01 21:49:22

+0

反饋的解釋將不勝感激。反對票的原因很可能是我想知道的。謝謝。 – Jasper 2012-02-01 21:55:00

0

在你的工作爲例,用戶變量叫employeeIDsassignmentIDs但在非工作代碼,您已追加[]到每年年底。

0

在JSON模式中,字符串僅在使用雙引號括起來時纔有效:http://www.json.org/。很多實現對此並不嚴格,但它看起來像您的服務器的實現。

相關問題