Я получаю ошибку ниже при попытке преобразовать json в запись с помощью метода constructFrom.
error {ballerina/lang.typedesc}ConversionError message='map<json>' value cannot be converted to 'news_impl:RolelessUser'
В чем проблема с моим подходом? Я разместил свой пример ниже (изменен для публикации).
import model;
import ballerina/io;
import ballerina/jsonutils;
type AuthDAO object {
public function getUserInfo(string userEmail) returns (model:User) {
// This is defined to compare the the errorneous result with this successful one
RolelessUser x1 = {
userId: "qqqwww",
emailAddress: "sam@gmail.com",
firstName: "sammm",
lastName: "rrr",
age: "33",
nic: "1212121",
dateAdded: "2020-04-19",
publicKey: "ssddff"
};
RolelessUser|error rolelessUserRecord1 = RolelessUser.constructFrom(x1);
io:println("rolelessUserRecord:", rolelessUserRecord1);
model:User user = {};
json[] userInfoJson = [];
io:println("in DAO: email:", userEmail);
var userInfoTable = testDB->select(GET_USER_INFO, RolelessUser, userEmail);
io:println("userInfoTable:" + userInfoTable.toString());
if (userInfoTable is table<model:RolelessUser>) {
userInfoJson = <json[]>jsonutils:fromTable(userInfoTable);
io:println("JSON is josn 1: ", userInfoJson[0]);
io:println("Test JSON is josn 2: ", x1);
io:println("Roleless User Info: ", userInfoJson[0]);
// this works
RolelessUser|error rolelessUserRecordTest = RolelessUser.constructFrom(x1);
io:println("Test rolelessUser Record:", rolelessUserRecordTest);
// this FAILS
RolelessUser|error rolelessUserRecord = RolelessUser.constructFrom(userInfoJson[0]);
io:println("rolelessUser Record:", rolelessUserRecord);
model:Role[]|error rolesArray = [];
var userRolesTable = testDB->select(GET_USER_ROLES, model:Role, userEmail);
json[] rolesJsonArray = [];
if (userRolesTable is table<model:Role>) {
rolesJsonArray = <json[]>jsonutils:fromTable(userRolesTable);
rolesArray = model:Role[].constructFrom(rolesJsonArray);
if (rolesArray is model:Role[]) {
io:println("User Roles:", rolesArray);
}
}
if (rolelessUserRecord is model:RolelessUser) {
io:println("YYY");
user.firstName = rolelessUserRecord.firstName;
user.lastName = rolelessUserRecord.lastName;
user.emailAddress = rolelessUserRecord.emailAddress;
user.age = rolelessUserRecord.age;
user.nic = rolelessUserRecord.nic;
io:println("reolseArray:", rolesArray);
if (rolesArray is model:Role[]) {
user.roles = rolesArray;
}
}
return user;
}
return user;
}
};
type RolelessUser record {
string userId = "";
string emailAddress = "";
string firstName = "";
string lastName = "";
string age = "";
string nic = "";
string dateAdded = "";
string publicKey = "";
};
Дает вывод ниже с вышеупомянутой ошибкой при вызове метода getUserInfo ().
rolelessUserRecord:userId=qqqwww emailAddress=sam@gmail.com firstName=sammm lastName=rrr age=33 nic=1212121 dateAdded=2020-04-19 publicKey=ssddff
in DAO: email:sam@gmail.com
userInfoTable:
JSON is josn 1: userId=qqqwww emailAddress=sam@gmail.com firstName=sammm lastName=dddk age=23 nic=1212121 dateAdded=2020-04-19 publicKey=ssddff
Test JSON is josn 2: userId=qqqwww emailAddress=sam@gmail.com firstName=sammm lastName=rrr age=33 nic=1212121 dateAdded=2020-04-19 publicKey=ssddff
Roleless User Info: userId=qqqwww emailAddress=sam@gmail.com firstName=sammm lastName=dddk age=23 nic=1212121 dateAdded=2020-04-19 publicKey=ssddff
Test rolelessUser Record:userId=qqqwww emailAddress=sam@gmail.com firstName=sammm lastName=rrr age=33 nic=1212121 dateAdded=2020-04-19 publicKey=ssddff
rolelessUser Record:error {ballerina/lang.typedesc}ConversionError message='map<json>' value cannot be converted to 'news_impl:RolelessUser'
User Roles:role_name=writer role_name=reader
Got userr info:roles= userId= emailAddress= firstName= lastName= age= nic= dateAdded= publicKey=