首页 > 数据库> > SpringBoot:redis存储报错 Cannot serialize;com.fasterxml.jackson.databind.exc.InvalidDefinitionException;
SpringBoot:redis存储报错 Cannot serialize;com.fasterxml.jackson.databind.exc.InvalidDefinitionException;
作者:互联网
Cannot serialize;
org.springframework.data.redis.serializer.SerializationException: Cannot serialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type
==[com.lightseablue.bookwebsite.entity.TableAllTypes$TableAllTypesBuilder]==
at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.serialize(JdkSerializationRedisSerializer.java:96)
at org.springframework.data.redis.core.AbstractOperations.rawValue(AbstractOperations.java:127)
at org.springframework.data.redis.core.DefaultValueOperations.set(DefaultValueOperations.java:235)
at com.lightseablue.bookwebsite.BookwebsiteApplicationTests.testRedis(BookwebsiteApplicationTests.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688)
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
问题
- 实体类没有实现序列化接口
- 图中的错误:使用了lombok组件的builder,导致获取不到序列化
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class
即使使用了序列化还是报错,这里用的是杰克逊
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.lightseablue.bookwebsite.entity.TableAllTypes$TableAllTypesBuilder and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
问题
springboot项目中定义了很多类,我们在rest返回中直接返回或者在返回对象中使用这些类,spring已经使用jackson自动帮我们完成这些的to json。但是有时候自动转的json内容太多,或者格式不符合我们的期望,因此需要调整类的to json过程,或者说希望自定义类的json过程。
解决办法:
使用@JsonIgnoreProperties、@JsonIgnore、@JsonFormat。
@JsonIgnore注解用来忽略某些字段,可以用在变量或者Getter方法上,用在Setter方法时,和变量效果一样。这个注解一般用在我们要忽略的字段上。
@JsonIgnoreProperties(ignoreUnknown = true),将这个注解写在类上之后,就会忽略类中不存在的字段。这个注解还可以指定要忽略的字段,例如@JsonIgnoreProperties({ “password”, “secretKey” })
@JsonFormat可以帮我们完成格式转换。例如对于Date类型字段,如果不适用JsonFormat默认在rest返回的是long,如果我们使用@JsonFormat(timezone = “GMT+8”, pattern = “yyyy-MM-dd HH:mm:ss”),就返回"2018-11-16 22:58:15"
标签:jackson,SpringBoot,java,serialize,redis,springframework,报错,org,com 来源: https://blog.csdn.net/Sakitaf/article/details/112575208