springboot使用jackson序列化报错

背景

最近在使用spring boot开发时,遇到jackson序列化的错误,折腾了好一会儿,这里记录一下。

报错信息

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.springframework.context.expression.StandardBeanExpressionResolver and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.goldwind.ngsp.ps.dto.Test$$EnhancerBySpringCGLIB$$d694239f["$$beanFactory"]->org.springframework.beans.factory.support.DefaultListableBeanFactory["beanExpressionResolver"])

实体类代码

@Configuration
@Component
@Data
public class Test {
  @Value("${test.name:Steven}")
  private String name;
}

Controller接口代码

@Autowired
private Test test;

@GetMapping(value = "/test")
public String test() {
   return JsonUtil.toJsonString(test);
}

配置文件

test.name=test

解决方案一

将@Configuration注解中的属性proxyBeanMethods 设置为 false

@Configuration(proxyBeanMethods=false)
// @Component
@Data
public class Test {
  @Value("${test.name:Steven}")
  private String name;
}

这里需要注意一下,要将@Component注解注释掉

解决方案二

将@Configuration注解替换为@Component注解

@Component
@Data
public class Test {
  @Value("${test.name:Steven}")
  private String name;
}

反思

这里还是对spring boot的注解理解不够导致的啊,少年,继续努力学习吧!

Spring Boot使用 Redis 插入对象时可能会遇到一些错误,常见的原因有: 1. **数据转换异常**:如果 Redis 需要存储的对象不是 String 类型,而 Spring Boot 没有配置相应的序列化策略,如 Jackson 或 JdkSerialization,插入对象时会抛出异常。需要确保在 RedisTemplate 的配置中设置正确的序列化和反序列化策略。 ```java @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); // 添加序列化和反序列化的支持 Jackson2JsonRedisSerializer<Object> jsonSerializer = new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jsonSerializer.setObjectMapper(om); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); template.setKeySerializer(stringRedisSerializer); template.setValueSerializer(jsonSerializer); // 其他配置... return template; } ``` 2. **实体类未正确标记为 @RedisHash 或 @RedisObject**:如果你正在尝试将 Java 对象作为 Hash 存储,需要使用 Spring Data Redis 提供的注解,如 `@RedisHash` 和 `@RedisKey`,以便自动序列化和存储。 3. **并发问题**:如果多个线程同时对同一个对象进行操作,可能出现数据竞争导致的异常。确保在操作 Redis 之前获取到合适的锁。 4. **连接问题**:检查 Redis 服务是否运行正常,网络连接是否畅通,Spring Boot 客户端的连接配置是否正确。 当你遇到此类错误时,可以按照上述建议排查,查看具体的错误日志信息以确定问题所在。如果还有问题,可以提供具体的错误堆栈或代码片段以便更好地诊断
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值