Ошибка различных загрузчиков классов при использовании конечной точки avro и rest - PullRequest
0 голосов
/ 16 октября 2019

У меня есть приложение весенней загрузки.

Я также использую org.apache.avro.

У меня есть конечная точка, которая принимает строку и пытается десериализовать ее следующим образом:

    public <T> T fromJson(Class<T> type, String string)  {
        SpecificDatumReader<T> reader = new SpecificDatumReader<>(type);
        try {
            JsonDecoder decoder = DecoderFactory.get()
.jsonDecoder(ReflectData.get().getSchema(type), string);
            return reader.read(null, decoder);
        } catch (IOException ex) {
            throw new RuntimeException("Deserialization error", ex);
        }
    }

    @PostMapping
    public Long test(@RequestBody String avroString) {
        Long result = 0
        Bank bank = fromJson(Bank.class, avroString);
        result = bank.getId();
        return result;
    }

мой код avdl:

@namespace("my.avro.api.v1")
protocol Api {
  record Bank {
    long id;
    string name;
    string bin;
  }
}

мои авроклассы автоматически генерируются с помощью avro-maven-plugin

моего сообщения:

{
  "id": 256,
  "name": "MyTestBank",
  "bin": "047516949"
}

, но я всегда получаю эту странную ошибку:

class my.avro.api.v1.Bank cannot be cast to class my.avro.api.v1.Bank
 (my.avro.api.v1.Bank is in unnamed module of loader 'app'; 
my.avro.api.v1.Bank is in unnamed module of loader
org.springframework.boot.devtools.restart.classloader.RestartClassLoader @712719ac)

Я понимаю, что можно записать конечную точку как public Long test(@RequestBody Bank bank), но я действительно не понимаю, почему я получаю эту ошибку при попытке десериализации строки. Может кто-нибудь помочь?

PS. Я понимаю, что этот случай может быть решен простым JSON, но в реальном сценарии мои авроклассы более сложные

...