gpt4 book ai didi

javascript - 无法从 VALUE_STRING 中反序列化 java.util.List 的实例

转载 作者:行者123 更新时间:2023-11-30 16:58:58 24 4
gpt4 key购买 nike

我正在开发一个应用程序,我想将一些数据发送到服务器并获得响应。我应该使用的格式如下。

{
"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 端。

最佳答案

您应该先去除斜杠,然后使用 html_entity_decodePOST 中删除所有编码,然后将 json 字符串解码为原始数组。下面是一个例子。

json_decode(html_entity_decode(stripslashes($_POST['privArray'])))

关于javascript - 无法从 VALUE_STRING 中反序列化 java.util.List 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29211039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com