возвращая MyBatis resultMap как карту - PullRequest
0 голосов
/ 23 октября 2018

У меня mybatis resultMap ссылается на класс POJO, как показано ниже.

<resultMap id="FolderResultMap" type="Folder">
    <result column="recordcount"  property="recordCount" />
    <result column="contenttype"  property="folderContentType"  />
    <result column="folderid"  property="folderId"  />
    <result column="folderdesc"  property="folderDescription"  />
    <result column="foldername"  property="folderName"  />
    <result column="foldertype"  property="folderType"  />
</resultMap>

<select id="findReportFolders" resultMap="FolderResultMap">
    some query
</select>

И в моем интерфейсе Mapper

List<Folder> findReportFolders (@Param("name") long id,
                                   @Param("id2") long busid);

Из-за этого я получаю ответ JSON в виде спискаобъектов, где мне нужна карта списка объектов, как указано ниже.

    {
  "folders": [
    {
      "recordCount": 7,
      "folderContentType": "Reports",
      "folderId": 139491,
      "folderDescription": null,
      "folderName": "AA_TestPrivateFolder1234",
      "folderType": "CUSTOM",
      "refreshable": true
    },
    {
      "recordCount": 35,
      "folderContentType": "Reports",
      "folderId": 140109,
      "folderDescription": "Default Folder for New Reports",
      "folderName": "label.privateReportInboxOverrideName",
      "folderType": "INBOX",
      "refreshable": true
    }]
    }

Это то, что я получаю сейчас.Я хотел бы получить ответ, как указано выше.

[{"folderId":359056,"folderName":"BE Shared Report Inbox","folderDescription":"BE Shared Report Inbox","folderType":"INBOX","folderContentType":"SharedReports","recordCount":0,"refreshable":true},{"folderId":363984,"folderName":"Default Inbox Folder","folderDescription":"Default Folder for New Reports","folderType":"INBOX","folderContentType":"Reports","recordCount":0,"refreshable":true}]

Любая идея, как я могу это сделать?

1 Ответ

0 голосов
/ 23 октября 2018

Ничто в вашем примере JSON не требует карты чего-либо.Вместо этого создайте иерархию объектов, которая представляет необходимую вам структуру JSON, и используйте Джексон (или некоторую другую библиотеку JSON) для генерации JSON.

Вот пример кода, который использует Джексона:

package blam.won;

import com.fasterxml.jackson.annotation.JsonProperty;

public class Blam
{
  @JsonProperty
  private String folderContentType;

  @JsonProperty
  private int recordCount;

  public void setFolderContentType(
    final String newValue)
  {
    folderContentType = newValue;
  }

  public void setRecordCount(
    final int newValue)
  {
    recordCount = newValue;
  }
}


package blam.won;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonProperty;

public class Kapow
{
  @JsonProperty("folders")
  private List<Blam> blamList;

  public void setBlamList(
    final List<Blam> newValue)
  {
    blamList = newValue;
  }
}


package blam.won;

import java.util.LinkedList;
import java.util.List;

import org.junit.Before;
import org.junit.Test;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class TestWon
{
  private ObjectMapper objectMapper;

  @Before
  public void preTestSetup()
  {
    objectMapper = new ObjectMapper();
  }

  @Test
  public void testKapow()
    throws JsonProcessingException
  {
    final Blam blam1 = new Blam();
    final Blam blam2 = new Blam();
    final List<Blam> blamList = new LinkedList<>();
    final String jsonString;
    final Kapow kapow = new Kapow();

    blam1.setFolderContentType("Reports");
    blam1.setRecordCount(7);
    blamList.add(blam1);

    blam2.setFolderContentType("Reports");
    blam2.setRecordCount(35);
    blamList.add(blam2);

    kapow.setBlamList(blamList);

    jsonString = objectMapper.writeValueAsString(kapow);

    System.out.println(jsonString);
  }
}
...