【发布时间】:2021-03-31 09:30:59
【问题描述】:
我的 Spring Boot 应用程序使用了一个用 @Configuration 和 @ConfigurationProperties 注释的类:
@Configuration
@ConfigurationProperties(prefix = "my")
@Getter
@Setter
public class MyConfigurationProperties {
@Value("${timeout}")
private int defaultTimeout;
}
现在我想使用(私有)REST 接口读取和更新这些配置属性,因此我创建了以下控制器。
@RestController
@RequestMapping(path = "config")
public class ConfigController {
final MyConfigurationProperties myConfig;
public ConfigController(MyConfigurationProperties myConfig) {
this.myConfig = myConfig;
}
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<MyConfigurationProperties> get() {
return ResponseEntity.ok(myConfig);
}
}
不幸的是,这似乎不起作用,因为我在调用端点时遇到以下异常:
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)
禁用FAIL_ON_EMPTY_BEANS 时,JSON 响应甚至包含“奇怪”属性:
如何使用 Jackson 来(反)序列化这个配置类?
当出于测试目的删除注释@Configuration 和@ConfigurationProperties 时,序列化工作正常。所以它似乎必须与作为 bean 的类有关?
【问题讨论】:
-
那个类有getter和setter吗?我确实看到了注释,但请确保在您的项目中启用了 lombok
-
是的,可以使用 getter 和 setter。龙目岛已启用。如果删除
@Configuration注释,序列化工作正常,但这不会满足我的用例。
标签: spring spring-boot jackson