(De-)Serializing Spring Boot ConfigurationProperties with Jackson
(De-)Serializing Spring Boot ConfigurationProperties with Jackson
我的 spring 引导应用程序使用 class 注释 @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 来(反)序列化此配置 class?
出于测试目的删除注释 @Configuration
和 @ConfigurationProperties
时,序列化工作正常。所以这似乎与 class 是一个豆子有关?
您正在混合使用:配置属性和自动装配值。如果您想将 POJO 作为配置 属性 class,请删除 @Value
注释。如果您将 @EnableConfigurationProperties
添加到主 class,您也可以删除 @Configuration
注释(这样所有 @ConfigurationProperties
class 都会被自动检测到)。如果问题仍然存在,请更新问题并向我们展示前缀为 'my' 的属性。
我的 spring 引导应用程序使用 class 注释 @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 来(反)序列化此配置 class?
出于测试目的删除注释 @Configuration
和 @ConfigurationProperties
时,序列化工作正常。所以这似乎与 class 是一个豆子有关?
您正在混合使用:配置属性和自动装配值。如果您想将 POJO 作为配置 属性 class,请删除 @Value
注释。如果您将 @EnableConfigurationProperties
添加到主 class,您也可以删除 @Configuration
注释(这样所有 @ConfigurationProperties
class 都会被自动检测到)。如果问题仍然存在,请更新问题并向我们展示前缀为 'my' 的属性。