spring-cloud-schema-registry-client不转换为Avro,我得到org.springfra



我的目标是让Spring自动将来自POJO和任何Avro模式文件的响应和请求编组为Avro格式。几天来,我一直试图让spring-cloud-schema-registry-client自动序列化/反序列化控制器发回的应用程序/avro消息作为响应。请求带有Accept头"application/avro"(我也试过application/emp。V1 +avro和其他组合)。

无论我尝试什么,响应消息都不会被spring cloud AvroSchemaMessageConverter自动反序列化。根据他们的文档,Avro模式应该自动从POJO中推断出来,并且响应应该在Avro中开箱即发。

我使用的依赖项是

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-schema-registry-client</artifactId>
<version>1.1.5</version>
</dependency>

我的应用程序。Yml文件有-

spring:
cloud:
stream:
bindings:
output:
contentType: application/*+avro
schema:
avro:
dynamicSchemaGenerationEnabled: true

有人能帮我理解为什么这不起作用,我不断得到错误信息-

org.springframework.http.converter.HttpMessageNotWritableException: No converter for [class java.util.Arrays$ArrayList]

我需要显式注册模式吗?例如,我将返回Employees POJO的列表。。如果需要,我可以尝试使用jackson-data格式从Employee POJO生成Avro模式,然后将其手动注册到AvroConverter bean。但是根据我的理解,这应该通过spring-cloud-schema-registry来完成。

附加信息:我的控制器返回一个Employee POJO列表,如

ResponseEntity<List<Employee>>

我在我的主类中使用了@EnableSchemRegistryClient和@SpringBootApplication。

在我的测试方法中,我使用:

MvcResult result = mockMvc
.perform(MockMvcRequestBuilders.get(url)
//.contentType(MediaType.APPLICATION_JSON_VALUE)
.accept("application/avro"))
.andExpect(content().contentType("application/avro")) 

我不再是Spring成员,并且我相信模式注册表不再被维护。但是它从未打算使用控制器来序列化/反序列化有效负载。它是为了与Spring Cloud Stream自己的序列化机制(版本1.x)一起工作。

我担心在这种情况下,如果没有在您的终端上进行一些修补来构建一个序列化器来查找给定模式的注册表并来回序列化它,它将无法工作。注意,为了查询注册表,你还需要一个带有模式FQN的头文件,为了不影响你的应用,缓存它是必须的。

希望Spring团队的人能提供一些更好的见解。

相关内容

最新更新