Reputation: 3243
I have the following class
@NoArgsConstructor
@Data
public class MainList implements Serializable {
private static final long serialVersionUID = 5679734271483606796L;
@Id
private String id;
private List<Category> categories;
}
@Builder
@Getter
@EqualsAndHashCode
@ToString
public class Category {
private String category;
private String description;
private List<Data> data;
}
@Builder
@Getter
@EqualsAndHashCode
@ToString
public class Data {
private int dataId;
@JsonIgnore
private Map<String, String> names;
private String name;
}
Request processing failed:
org.springframework.data.redis.serializer.SerializationException: Could not read JSON:Cannot construct instance of `com.domain.Category` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (byte[])"{"@class":"com.domain.MainList","id":"1245","categories":["java.util.ArrayList",[{"@class":"com.adapter.domain.Category","category":"","data":["java.util.ArrayList",[{"@class":"com.domain.Category$Data”,”dataId":83683,"description":"##########################"},{"@class":"com.domain.Category$Data”,”dataId”:77124,"description":"##############################"},{"@class":"com.hollandandbar"[truncated 5674445 bytes]; line: 1, column: 180] (through reference chain: com.domain.MainList["categories"]->java.util.ArrayList[0]) ] with root cause
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.domain.Category` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
REdisTemplate set up
final var objectMapper = new Jackson2ObjectMapperBuilder().failOnEmptyBeans(false)
.failOnUnknownProperties(false)
.indentOutput(false)
.serializationInclusion(JsonInclude.Include.NON_NULL)
.modules(new JavaTimeModule())
.build();
objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(),
ObjectMapper.DefaultTyping.EVERYTHING,
JsonTypeInfo.As.PROPERTY);
final var genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(objectMapper);
final RedisSerializer<String> stringRedisSerializer = new StringRedisSerializer();
RedisTemplate<String, MainList> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
template.setHashKeySerializer(stringRedisSerializer);
template.setHashValueSerializer(genericJackson2JsonRedisSerializer);
Any ideas?
Upvotes: 0
Views: 24
Reputation: 3243
fixed by annotating with the following
@NoArgsConstructor
@AllArgsConstructor
Upvotes: 1