У меня есть таблица базы данных с типом данных JSONB как один из столбцов. Мое приложение в Struts2, которое использует struts2-json.jar для сопоставления запроса и ответа как JSON.Проблема с получением данных JSON из PostgreSQL
Проблема, с которой я столкнулась, заключается в том, что я хочу отправить данные JSON из столбца таблицы в виде массива JSON в ответе. Однако я в конечном итоге отправляю данные как Hash-literal.
Когда метод возвращает УСПЕХ, существует связанная с HashMap связь, которая используется для возврата данных в виде JSON.
Я помещаю имя столбца в качестве ключа и значение этого столбца в качестве значения для этого ключа в HashMap.
Однако, когда библиотека struts2-json преобразует значение ключа JSON следующим образом.
{
"status":"success",
"data":[
{
"sem_votes_allowed":{
"type":"jsonb",
"value":"{\"sem_votes_allowed\": [{\"E1\": \"100\", \"E2\": \"200\"}]}"
},
"uvp_even_id":{
"type":"jsonb",
"value":"[\"E1\", \"E2\"]"
},
"usm_x_mobile_no":null,
"usm_pin_no":null,
"sem_first_even_flag":null,
"sem_holdings":{
"type":"jsonb",
"value":"{\"sem_holdings\": [{\"E1\": \"100\", \"E2\": \"200\"}]}"
}
}
],
"action":"sc/get_shareholder_list",
"statusmsg":"Share holder list",
"statuscode":"E_OK"
}
И ответ я хочу послать это
{
"status":"success",
"data":[
{
"sem_votes_allowed":{
"sem_votes_allowed":[
{
"E1":"100",
"E2":"200"
}
]
},
"uvp_even_id":[
"E1",
"E2"
],
"usm_x_mobile_no":null,
"usm_pin_no":null,
"sem_first_even_flag":null,
"sem_holdings":{
"sem_holdings":[
{
"E1":"10",
"E2":"200"
}
]
}
}
],
"action":"sc/get_shareholder_list",
"statusmsg":"Share holder list",
"statuscode":"E_OK"
}
"sem_votes_allowed", "uvp_even_id", и "sem_holdings" являются столбцы таблицы с типом данных, как JSONB.
Ниже приведен фрагмент кода, в котором заполняется HashMap.
ResultSetMetaData rsmd = rs.getMetaData();
int numColumns = rsmd.getColumnCount();
while (rs.next()) {
HashMap<String, Object> record = new HashMap<String, Object>();
for (int i = 1; i < numColumns + 1; i++) {
String columnName = rsmd.getColumnName(i);
record.put(columnName, rs.getObject(columnName));
}
out.add(record); // ArrayList out
}
shareDataMap является членом экземпляра и имеет геттер и сеттер
HashMap <String,Object> shareDataMap = new HashMap<>();
shareDataLs = conn.executeQuery(query, params);
System.out.println("shareDataLs: " + shareDataLs);
shareDataMap.put(Constants.SUCCESS, Constants.SUCCESS);
shareDataMap.put(Constants.DATA, shareDataLs);
Это фрагмент кода в struts.xml
<action name="get_shareholder_list" method="shareHldrLs"
class="co.merce.instapoll.ui.ShareHldrAction">
<result type="json" name="success">
<param name="root">shareDataMap</param>
</result>
</action>
Было бы очень полезно, если бы кто-нибудь может показать мне обходной путь для достижения этого.
Заранее спасибо.