首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LightAdmin -使用app时区自定义解析DateTime

LightAdmin -使用app时区自定义解析DateTime
EN

Stack Overflow用户
提问于 2015-06-08 15:27:46
回答 1查看 230关注 0票数 0

我使用的是带有Spring的LightAdmin 1.1.0快照。我使用Joda DateTime来表示带区域的时间。

我可以看到LightAdmin捕获UTC中的日期时间,用于解析数据的默认反序列化上下文是UTC在LightAdmin中使用的。从调试中,我看到LightAdmin使用自己的ObjectMapper,MessageConverters使用LightAdminRestMvcConfiguration,所以它没有像下面这样使用Spring全局覆盖器来定制Jackson2ObjectMapperBuilder。

代码语言:javascript
复制
@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
    builder.timeZone(coreProperties.appTimeZone());
    return builder;
}

任何关于如何( 1)重写LightAdmin中杰克逊的设置以使用默认应用时区进行解析的帮助,或者( 2)在LightAdmin之外处理Json序列化/转换器以不同方式解决这个问题的帮助。任何帮助都会很棒。

谢谢,亚历克斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-14 11:28:48

解决问题的一种方法是在使用下面的内容加载上下文之后重新配置LightAdmin bean。

代码语言:javascript
复制
@Component
public class AppContextListener implements ApplicationListener<ContextRefreshedEvent>{

    @Inject
    CoreProperties coreProperties;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {

        GenericWebApplicationContext appContext = getRootApplicationContext(event);
        WebApplicationContext lightAdminWebContext = getWebApplicationContext(appContext.getServletContext(), LightAdminWebApplicationInitializer.SERVLET_CONTEXT_ATTRIBUTE_NAME);
        lightAdminWebContext.getBeansOfType(ObjectMapper.class).values().stream()
                    .forEach(objectMapper -> objectMapper.setTimeZone(coreProperties.appTimeZone()));
    }

    private GenericWebApplicationContext getRootApplicationContext(ContextRefreshedEvent event) {
        return (GenericWebApplicationContext) (event.getApplicationContext().getParent() != null ? event.getApplicationContext().getParent() : event.getApplicationContext());
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30713237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档