Skip to content

Spring boot 3 reactive redis native problem in runtime #2551

@ricardkollcaku

Description

@ricardkollcaku

Everything works well when i run the application normally but im receiving error when running the application in native.
The project is simple contains just one DummyModel

public class DummyModel {
  private String name;
  public DummyModel() {}
  public DummyModel(String name) {this.name = name;}
  public String getName() {return name;}
  public void setName(String name) {this.name = name;}
}

Template Configuration

@Configuration
public class RedisConfiguration {
  @Bean
  public ReactiveRedisTemplate<String, DummyModel> template(ReactiveRedisConnectionFactory factory) {
    StringRedisSerializer keySerializer = new StringRedisSerializer();
    Jackson2JsonRedisSerializer<DummyModel> valueSerializer = new Jackson2JsonRedisSerializer<>( DummyModel.class);
    RedisSerializationContext.RedisSerializationContextBuilder<String, DummyModel> builder = RedisSerializationContext.newSerializationContext(keySerializer);
    RedisSerializationContext<String, DummyModel> context = builder.value(valueSerializer).build();
    return new ReactiveRedisTemplate<>(factory, context);
  }
}

And the Repository:

@Component
public class DummyRedisRepository {
  @Autowired
  ReactiveRedisTemplate<String, DummyModel> template;
  public Mono<DummyModel> save(DummyModel dummyModel) {
    return template.opsForValue().set(dummyModel.getName(), dummyModel)
        .filter(aBoolean -> aBoolean)
        .map(aBoolean -> dummyModel);
  }}
  

Whenever i try to save an object i get the following serialisation problem:

reactor.core.Exceptions$ErrorCallbackNotImplemented: org.springframework.data.redis.serializer.SerializationException: Could not write JSON: No serializer found for class com.example.demo.data.model.DummyModel and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS). This appears to be a native image, in which case you may need to configure reflection for the class that is to be serialized
Caused by: org.springframework.data.redis.serializer.SerializationException: Could not write JSON: No serializer found for class com.example.demo.data.model.DummyModel and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS). This appears to be a native image, in which case you may need to configure reflection for the class that is to be serialized
      at org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer.serialize(Jackson2JsonRedisSerializer.java:151) ~[na:na]
      at org.springframework.data.redis.serializer.DefaultRedisElementWriter.write(DefaultRedisElementWriter.java:41) ~[na:na]
      at org.springframework.data.redis.serializer.RedisSerializationContext$SerializationPair.write(RedisSerializationContext.java:287) ~[demo:3.0.5-SNAPSHOT]
      at org.springframework.data.redis.core.DefaultReactiveValueOperations.rawValue(DefaultReactiveValueOperations.java:317) ~[na:na]
      at org.springframework.data.redis.core.DefaultReactiveValueOperations.lambda$set$0(DefaultReactiveValueOperations.java:63) ~[na:na]
      at org.springframework.data.redis.core.DefaultReactiveValueOperations.lambda$createMono$34(DefaultReactiveValueOperations.java:309) ~[na:na]
      at org.springframework.data.redis.core.ReactiveRedisTemplate.lambda$doInConnection$1(ReactiveRedisTemplate.java:244) ~[demo:3.0.5-SNAPSHOT]
      at reactor.core.publisher.FluxUsingWhen.deriveFluxFromResource(FluxUsingWhen.java:120) ~[demo:3.5.5]
      at reactor.core.publisher.FluxUsingWhen.subscribe(FluxUsingWhen.java:86) ~[demo:3.5.5]
      at reactor.core.publisher.Mono.subscribe(Mono.java:4485) ~[demo:3.5.5]
      at reactor.core.publisher.Mono.subscribeWith(Mono.java:4551) ~[demo:3.5.5]
      at reactor.core.publisher.Mono.subscribe(Mono.java:4452) ~[demo:3.5.5]
      at reactor.core.publisher.Mono.subscribe(Mono.java:4388) ~[demo:3.5.5]
      at reactor.core.publisher.Mono.subscribe(Mono.java:4335) ~[demo:3.5.5]
      at com.example.demo.DemoApplication.run(DemoApplication.java:28) ~[demo:na]
      at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:769) ~[demo:3.0.6-SNAPSHOT]
      at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:753) ~[demo:3.0.6-SNAPSHOT]
      at org.springframework.boot.SpringApplication.run(SpringApplication.java:317) ~[demo:3.0.6-SNAPSHOT]
      at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304) ~[demo:3.0.6-SNAPSHOT]
      at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293) ~[demo:3.0.6-SNAPSHOT]
      at com.example.demo.DemoApplication.main(DemoApplication.java:22) ~[demo:na]
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.example.demo.data.model.DummyModel and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS). This appears to be a native image, in which case you may need to configure reflection for the class that is to be serialized
      at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1306) ~[demo:2.14.2]
      at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:408) ~[demo:2.14.2]
      at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:49) ~[na:na]
      at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:30) ~[na:na]
      at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480) ~[demo:2.14.2]
      at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319) ~[demo:2.14.2]
      at com.fasterxml.jackson.databind.ObjectMapper._writeValueAndClose(ObjectMapper.java:4624) ~[demo:2.14.2]
      at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsBytes(ObjectMapper.java:3892) ~[demo:2.14.2]
      at org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer.serialize(Jackson2JsonRedisSerializer.java:149) ~[na:na]
      ... 20 common frames omitted
      ```

`

Metadata

Metadata

Assignees

No one assigned

    Labels

    status: invalidAn issue that we don't feel is valid

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions