环境:
我使用的是spring boot版本2.3.3版本
问题
由于我不希望对某些字段进行自定义反序列化,所以我使用ObjectMapper在我的自定义反序列化器中使用convertValue()
。
我注意到,我不能@autowire
在我的任何反序列化器中使用ObjectMapper,或者在我的应用程序中自动连线的其他ObjectMapper将无法获得配置(因此反序列化器没有正确注册)
我正在使用(ObjectMapper)jsonParser.getCodec();
在反序列化程序中获取ObjectMapper
但是这个ObjectMapper没有正确配置(这意味着忽略了类/方法上的注释)。
我想反序列化我的对象,如下所示:
@Test
void testDeserializeFoo() throws IOException {
ObjectMapper om = new ObjectMapper(); // this is obtained by jsonParser in deserializer but it behaves the same, since the ObjectMapper lacks the configuration
InputStream is = getClass().getResourceAsStream("/json/foo.json");
JsonNode fooNode = om.readTree(is);
Foo foo = om.convertValue(fooNode, Foo.class);
log.info("Foo: " + foo);
}
Foo的构造函数用@jsonCreator
注释。
可能的解决方案/测试:
我测试我的反序列化器是这样的:
private JsonParser getJsonParser(String resource) throws IOException {
InputStream src = getInputStream(resource);
return objectMapper.createParser(src);
}
@Test
void testDeserializeFoo() throws IOException {
JsonParser parser = getJsonParser("/json/foo.json");
Foo foo = deserializer.deserialize(parser, null);
System.out.println(foo);
}
问题是getParser()方法中的objectMapper始终是一个新实例。现在我使用autowired ObjectMapper。但这又有什么作用呢?
我找了相关的话题,其他答案相关的地方:
通常,您可以使用Jackson2ObjectMapperBuilder和build()生成新的对象映射器实例,并应用所有最近的设置。默认的ObjectMapper由JackonAutoConfiguration中的JackonsObjectMapperConfiguration提供。所有jackson2对象映射器构建器实例都是由JacksonAutoConfiguration中的JacksonObjectMapperBuilderConfiguration创建的。有关配置对象映射器的详细信息可在此处找到
如果您不喜欢JacksonAutoConfiguration中的标准默认值,可以使用Jackson2ObjectMapperBuilderCustomizerConfiguration进一步自定义jackson2对象映射器生成器
检查这个答案--它将回答你的其他问题
本文向大家介绍spring中bean的生命周期详解,包括了spring中bean的生命周期详解的使用技巧和注意事项,需要的朋友参考一下 1.Spring IOC容器可以管理bean的生命周期,Spring允许在bean生命周期内特定的时间点执行指定的任务。 2.Spring IOC容器对bean的生命周期进行管理的过程: ① 通过构造器或工厂方法创建bean实例 ② 为bean的属性设置值和对其他
要了解Spring事件是否适合我正在处理的任务,我需要了解它们是如何工作的,它们存储在哪里?因为我可以猜测它们存储在Spring应用程序上下文中,如果应用程序崩溃则会消失,我的猜测正确吗?
问题内容: 在Spring下如何适当地完成Hibernate会话的“生命周期”? 该由Spring自动创建并从Glassfish的连接池利用其数据库连接。目前,我正在通过进行Hibernate会话。然后,我开始交易,完成工作,然后或结束。我需要做任何其他操作,如,,在任何时间或任何其他人,以便连接将被适当地返回到游泳池或就是一切已经自动春天呢? 有了很多这样的方法,这让我眼前一亮,无法理解应该何时
首先简单说一下(以下为一个回答的参考模板) 1、实例化一个Bean--也就是我们常说的new; 2、按照Spring上下文对实例化的Bean进行配置--也就是IOC注入; 3、如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String)方法,此处传递的就是Spring配置文件中Bean的id值 4、如果这个Bean已经实现了BeanFactoryA
我对Spring的生命周期感到困惑。 上面的代码片段是否创建了对象? 如果上述答案为真。 a) 然后,对于作用域为“singleton”的bean,获取在上述代码片段中创建的对象。我是对还是错? b)对于范围为“原型”的情况,创建的对象是否未使用。因为,容器总是返回新对象。 上面的代码片段是否创建了对象? 如果答案是假的, Spring框架如何验证bean定义是否正确。 根据亨利的回答 通常,单例
注:本文档提供的生命周期指的是 Universal App 的生命周期,它依赖 rax-app 提供的 runApp方法。 App 级生命周期 launch 在 App 启动时触发 使用生命周期 你可以使用 rax-app 提供的 useAppLaunch 来注册 App 级别的生命周期。 示例: import { useAppLaunch } from 'rax-app'; useAppLa