Не удалось записать JSON: не найден сериализатор для класса net.i2p.crypto.eddsa.math.ed25519.Ed25519LittleEndianEncoding - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь внедрить Spring Web-сервер в Cordapp, но постоянно получаю ту же ошибку Сериализации.

{
"timestamp": 1529999846743,
"status": 500,
"error": "Internal Server Error",
"exception": "org.springframework.http.converter.HttpMessageNotWritableException",
"message": "org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: No serializer found for class net.i2p.crypto.eddsa.math.ed25519.Ed25519LittleEndianEncoding and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS); nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class net.i2p.crypto.eddsa.math.ed25519.Ed25519LittleEndianEncoding and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->java.util.Collections$SingletonMap[\"state\"]->java.util.Collections$SingletonMap[\"data\"]->java.util.LinkedHashMap[\"exitKeys\"]->java.util.LinkedHashSet[0]->net.i2p.crypto.eddsa.EdDSAPublicKey[\"params\"]->net.i2p.crypto.eddsa.spec.EdDSANamedCurveSpec[\"curve\"]->net.i2p.crypto.eddsa.math.Curve[\"field\"]->net.i2p.crypto.eddsa.math.Field[\"encoding\"])",
"path": "/api/obligation/cash"

}

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Эта ошибка выдается, когда Джексон пытается сериализовать класс PublicKey в JSON format. Corda предоставляет Jackson support для некоторых встроенных классов, и вы должны зарегистрировать этот модуль в Spring:

  1. Добавьте corda-jackson зависимость в ваш весенний проект.

    net.corda: Corda-джексон: 3,1-Corda

  2. Зарегистрируйте поддержку Corda Jackson Module для вашего весеннего проекта. Вы можете сделать это с помощью конфигурации Java, как показано ниже:

@Bean public Module registerModule() { return JacksonSupport.INSTANCE.getCordaModule(); }

0 голосов
/ 01 сентября 2018

создайте ObjectMapper в классе @Configuration следующим образом:

@Configuration
class Plugin {

   @Bean
   fun registerModule(): ObjectMapper {
      return JacksonSupport.createNonRpcMapper()
   }
}

и тебе пора!

0 голосов
/ 26 июня 2018

Обычно вы пытаетесь сериализовать объект класса net.i2p.crypto.eddsa.math.ed25519.Ed25519LittleEndianEncoding, и, как вы можете видеть из источников , этот класс не имеет полей, что приводит к сбою сериализации.

Вы должны добавить эту строку в вашу конфигурацию картографа:

mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

, затем посмотрите, соответствует ли вам вывод.

Редактировать: Согласно Spring Boot документация , вы можете добавить эту конфигурацию в маппер по умолчанию, добавив

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false

в файл application.properties.

...