Исключение в библиотеке GSON: - java .lang.IllegalArgumentException: класс oracle .jdb c .driver.Accessor объявляет несколько JSON полей с именем Statement - PullRequest
0 голосов
/ 02 марта 2020

У меня есть Список карт, и я хочу, чтобы он был преобразован в JSON. Я использую GSON для преобразования, но выдает ошибку типа

java .lang.IllegalArgumentException: класс oracle .jdb c .driver.Accessor объявляет несколько JSON полей с именем оператора

Я передаю этот объект с именем results, который получается с помощью myBatis.

[{EMAIL_TEMPLATE_ID=1, CREATED_BY=owner, COMMON_BODY=oracle.sql.CLOB@1d8b47a, COMMON_SUBJECT=This os common subject line in notification table, CREATED_DATE=2020-02-03 00:00:00.0, COMMON_CC_USER=abc@gmail.com, STATUS=pending, NOTIFICATION_ID=1, HAS_ATTACHMENT=y, UPDATED_BY=tester, EXPIRY_DAYS=10, SCHEDULE_TIME=2, COMMON_TO_USER=xyz@gmail.com, UPDATED_DATE=2020-02-03 00:00:00.0, NOTIFICATION_TYPE=dist}]
String json = gson.toJson(results);

Для объекта выше это дает мне ошибку, но для объекта ниже он работает нормально

[{CONTENT_TYPE=abc, ID=1, NAME=abc}, {CONTENT_TYPE=xyz, ID=2, NAME=xyz}]

РЕДАКТИРОВАТЬ: -

Запрос базы данных: -


CREATE TABLE "TESTDB"
(   
    "NOTIFICATION_ID" NUMBER,
    "NOTIFICATION_TYPE" VARCHAR2(50) ,
    "SITE_ID" VARCHAR2(100),
    "CONTENT_TYPE" VARCHAR2(50),
    "STATUS" VARCHAR2(50) ,
    "COMMON_SUBJECT" VARCHAR2(300),
    "COMMON_BODY" CLOB,
    "COMMON_TO_USER" VARCHAR2(2500),
    "COMMON_CC_USER" VARCHAR2(2500),
    "COMMON_BCC_USER" VARCHAR2(2500),
    "EMAIL_TEMPLATE_ID" NUMBER,
    "HAS_ATTACHMENT" CHAR(1),
    "CREATED_DATE" TIMESTAMP ,
    "CREATED_BY" VARCHAR2(50),
    "UPDATED_DATE" TIMESTAMP,
    "UPDATED_BY" VARCHAR2(50),
    "EXPIRY_DAYS" NUMBER,
    "SCHEDULE_TIME" VARCHAR2(100),
    "SP_SEND_STATUS" VARCHAR2(50),
    "SP_SEND_DATE" TIMESTAMP,
    "SP_SEND_MSG" VARCHAR2(400),
    "SP_REQUESTID" VARCHAR2(50),
    CONSTRAINT N PRIMARY KEY (NOTIFICATION_ID)
);
COMMIT;

MyBatis Mapper: - *

<?xml version = "1.0" encoding = "UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace = "ecm">  
    <select id = "ecmrepo_read" resultType = "java.util.HashMap">
        select * from TESTDB 
        <where>
            <foreach item = "entry" index = "key" separator = "AND" collection = "WHERE">
                 ${key} = #{entry}
            </foreach>

        </where>
    </select>

Получение результатов в списке карт

List<Map<String,Object>> results =  session.selectList("ecm.ecmrepo_read",searchparams);

преобразование в JSON формат.

String json = gson.toJson(results);

1 Ответ

0 голосов
/ 06 марта 2020

При использовании Map в качестве типа результата MyBatis может не выбрать обработчик типа по вашему выбору.
Возможно, вам потребуется определить карту результатов, чтобы помочь MyBatis.

<resultMap id="testResultMap" type="java.util.HashMap">
  <result property="COMMON_BODY" column="COMMON_BODY"
    javaType="string" />
  <!-- other columns will be auto-mapped -->
</resultMap>

<select id="ecmrepo_read" resultMap="testResultMap">
  select * from TESTDB 
  <where>
    <foreach item="entry" index="key" separator="AND" collection="WHERE">
      ${key} = #{entry}
    </foreach>
  </where>
</select>

В качестве альтернативы, Вы можете создать и использовать POJO вместо HashMap.

...