当前位置: 首页 > 知识库问答 >
问题:

使用Jackson序列化Spring Boot ConfigurationProperties

赵嘉纳
2023-03-14

我的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);
    }
}

不幸的是,这似乎不起作用,因为我在调用endpoint时遇到以下异常:

当出于测试目的删除注释@configuration@configurationproperties时,序列化工作正常。所以它似乎必须要做一些事情来处理类是bean?

共有1个答案

马清野
2023-03-14

您混合了一些东西:配置属性和自动生成一个值。如果希望将POJO作为配置属性类,请删除@value注释。如果将@EnableConfigurationProperties添加到主类中,则还可以删除@ConfigurationProperties批注(这样将自动检测所有@ConfigurationProperties类)。如果问题持续存在,请更新问题并向我们展示前缀为'my'的属性是什么样子的。

 类似资料:
  • 我想将json反序列化到类Foo: IBar有两个实现,但是当反序列化时,我总是想使用第一个实现。(理想情况下,这将使问题变得更容易,因为不需要运行时类型检查) 我相信我可以编写自定义反序列化程序,但我觉得一定有更简单的方法。 我找到了这个注释,它在没有列表的情况下非常有效。

  • 我得到了以下代码: 我得到了这个: {"时间":{"小时": 20,"分钟": 49,"秒": 42,"纳米": 99000000,"一天": 19,"一天":"星期四","月":"一月","一天": 19,"年": 2017,"月值": 1,"年表":{"id":"ISO","calendarType":"iso8601"}}} 我要实现的是ISO8601中的字符串 2017-01-19T18:

  • 问题内容: 我有一个下面的枚举: 我用控制器()返回枚举数组,Spring将其序列化为以下json字符串: 强迫Jackson像POJO一样序列化枚举的最佳方法是什么?例如: 我使用了不同的注释,但无法获得这样的结果。 问题答案: 终于我找到了解决方案。 我必须用注释枚举并实现自定义序列化程序:

  • 我需要一个自定义反序列化器来在复杂的POJO中转换字符串。反序列化工作直到使用反序列化器:特别是使用自定义反序列化器时,我的对象的非对象属性不会序列化。 我有一个restful Web服务,它有一个pojo作为参数。 所以我的类PreentivoWs需要一个方法。这里是类定义: 在jsonObject中,我有一个枚举定义为 但此对象需要转换反序列化程序: 并在财产上标注: fromString方法

  • 问题内容: 我正在使用Spring的MappingJacksonHttpMessageConverter将JSON消息转换为控制器中的对象。 对于声明为ArrayList的字段,如果json消息包含一个String,则将引发以下异常: 一个例子是下面的类定义: 传入的Json在哪里: 如您所见,这将产生异常,因为图像应该是数组。 我想使自定义解串器更加宽容。如果反序列化失败,则从String中创建

  • 问题内容: 我有一个json字符串,应该将其反序列化为以下类 我该怎么做?这是通常的方式 但是我怎么提到T代表什么呢? 问题答案: 你需要为使用的每种通用类型创建一个对象,并将其用于反序列化。例如