我正在开发一个应用程序,我想将一些数据发送到服务器并获得响应。我应该使用的格式如下。
{
"userName" :"testuser2@test.com",
"targetUserName":"janagan.h@gmail.com",
"admin":"false",
"privilege": [{ "site":1, "privileges": ["LIVE_FEED","PLAYBACK"] } ]
}
我应发送的数据由javascript填充并发送到PHP函数,我在其中使用curl将请求发送到服务器。以下是我用来发送请求的功能。
function baloba_update_user_priviledges(){
if( isset($_SESSION['user']) && isset($_POST['username']) && isset($_POST['is_admin']) && isset($_POST['privArray']) ){
$data = array('userName' => $_SESSION['user'], 'targetUserName' => $_POST['username'], 'privilege' => stripslashes($_POST['privArray']), 'admin' => $_POST['is_admin']);
echo json_encode($data);
$ch = 'https://54.169.242.241:8243/service_management_api/1.0/services/usermanage/assign_privilege';
$responseData = baloba_api_requset($data ,$ch);
extract($responseData);
if($status == 'SUCCESS'){
echo json_encode(array('status' => 'SUCCESS', 'message' => $message ),TRUE);
die();
}
}
}
我使用echo
来查看正在设置$data
数组的内容。以下是。
{"userName":"testuser2@test.com","targetUserName":"testuser1@test.com","privilege":"[{\"site\":\"a0626000000HnwdAAC\",\"privileges\":[\"LIVE_FEED\",\"PLAYBACK\"]}]","admin":"false"}
当我将此数组发送到服务器时,它会返回以下错误。
HTTP Status 400 - org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.List out of VALUE_STRING token
at [Source: org.apache.catalina.connector.CoyoteInputStream@5ba88001; line: 1, column: 71]
用于生成数据的javascript如下。
function saveUserPriviledges(username,privArray){
return $.ajax({
type : 'POST',
url : '/wordpress/wp-admin/admin-ajax.php',
data : { action: "baloba_update_user_priviledges", 'username' : username, 'is_admin' : false , 'privArray' : JSON.stringify(privArray) },
});
}
function saveUserPriviledgeHandler(username,privArray){
$.when(saveUserPriviledges(username,privArray)).then(function(response){
console.log(JSON.parse(response));
})
}
function priviledgeObjCreator(siteId,privArray){
return { 'site':siteId , 'privileges':privArray }
}
$(document).on('click','.save-priv-changes',function(){
var privObjArray = [];
var priv = [];
var user = $('#userPriv').data('priv-current-user')
$('#userPriv .tab-pane').each(function(e,tab){
$(tab).find('.cmn-toggle:checked').each(function(i,el){
priv.push($(el).attr('id').replace('cmn-toggle-',''));
})
privObjArray.push(priviledgeObjCreator(tab.id.replace('user-priv-',''),priv));
})
saveUserPriviledges(user,privObjArray)
})
我在这里做错了什么。我在php中也使用了stripslashes
函数。但我无法生成必要的请求字符串。我该如何以相同的格式提出请求。我理解当我发送正确的请求格式时它是成功的并且java代码中没有错误,因为错误是在java端。
答案 0 :(得分:2)
首先应删除斜杠,然后使用html_entity_decode
删除POST
中的所有编码,然后将json字符串解码为原始数组。以下是一个例子。
json_decode(html_entity_decode(stripslashes($_POST['privArray'])))