LightAdmin - 使用应用程序时区自定义解析 DateTime
LightAdmin - Customise parsing DateTime with app timezone
我正在使用 LightAdmin 1.1。0.Snapshot 和 Spring Boot。我正在使用 Joda DateTime 来表示带时区的时间。
我可以看到 LightAdmin 以 UTC 捕获日期时间,用于解析数据的默认反序列化上下文是 LightAdmin 中的 UTC。从调试中,我看到 LightAdmin 使用它自己的 ObjectMapper 和 MessageConverters 使用 LightAdminRestMvcConfiguration,所以它没有使用 Spring 引导全局替代程序来自定义 Jackson2ObjectMapperBuilder,如下所示。
@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.timeZone(coreProperties.appTimeZone());
return builder;
}
有关如何 1) 覆盖 LightAdmin 中 Jackson 的设置以使用默认应用程序时区进行解析或 2) 在 LightAdmin 外部处理 Json 序列化/转换器以不同方式解决此问题的任何帮助。任何帮助都会很棒。
谢谢,
亚历克斯
我解决问题的一种方法是在使用以下方法加载上下文后重新配置 LightAdmin bean。
@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());
}
}
我正在使用 LightAdmin 1.1。0.Snapshot 和 Spring Boot。我正在使用 Joda DateTime 来表示带时区的时间。
我可以看到 LightAdmin 以 UTC 捕获日期时间,用于解析数据的默认反序列化上下文是 LightAdmin 中的 UTC。从调试中,我看到 LightAdmin 使用它自己的 ObjectMapper 和 MessageConverters 使用 LightAdminRestMvcConfiguration,所以它没有使用 Spring 引导全局替代程序来自定义 Jackson2ObjectMapperBuilder,如下所示。
@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.timeZone(coreProperties.appTimeZone());
return builder;
}
有关如何 1) 覆盖 LightAdmin 中 Jackson 的设置以使用默认应用程序时区进行解析或 2) 在 LightAdmin 外部处理 Json 序列化/转换器以不同方式解决此问题的任何帮助。任何帮助都会很棒。
谢谢, 亚历克斯
我解决问题的一种方法是在使用以下方法加载上下文后重新配置 LightAdmin bean。
@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());
}
}