Я использую Java Github API
из org.kohsuke.github
, чтобы получить объект GHRepository
. Я хочу сериализовать этот объект в JSON
. Есть ли способ сделать это в org.kohsuke.github
клиенте? Возможно, используется Jackson
?
В настоящее время при использовании jackson мне пришлось создать пользовательское pojo, чтобы избежать встречи Jackson с нулевыми ключами и значениями Map. Я подозреваю, что в этой библиотеке github уже есть код для этого, так как я вижу, как он сериализуется в JSON в GitHub.java
, но я не вижу общедоступных средств использования этого. Приведенный ниже код выполняет итерацию по всем моим репозиториям во всех моих организациях, чтобы получить JSON-представление репо, которое затем будет сохранено в базе данных.
// Iterate over all orgs that I can see on enterprise
github.listOrganizations().withPageSize(100).forEach( org -> {
// Get all the repositories in an org
Map<String, GHRepository> ghRepositoryMap = org.getRepositories();
// Iterate over each repo object and serialize
for (Map.Entry<String, GHRepository> entry :ghRepositoryMap.entrySet() ) {
// Serialize to JSON
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); //Handles null fields ok
String jsonStr = objectMapper.writeValueAsString(entry.getValue()); // <-- this fails due to null key
}
}
Последняя строка приводит к следующему:
com.fasterxml.jackson.databind.JsonMappingException: нулевой ключ для карты не разрешен в JSON (использовать преобразователь NullKeySerializer?) (через цепочку ссылок: org.kohsuke.github.GHRepository ["responseHeaderFields"] -> java.util.Collections $ UnmodifiableMap ["ноль"])
При осмотре я считаю, что это не единственный null
ключ. Я, вероятно, мог бы настроить это чертовски хорошо, добавив миксины для их обработки, но я ищу встроенный способ в org.kohsuke.github
библиотеке, который упрощает это, поскольку он, похоже, способен делать это внутренне.