Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc LightAdmin-使用应用程序时区自定义解析日期时间_Spring Mvc_Spring Boot_Spring Data_Spring Restcontroller_Lightadmin - Fatal编程技术网

Spring mvc LightAdmin-使用应用程序时区自定义解析日期时间

Spring mvc LightAdmin-使用应用程序时区自定义解析日期时间,spring-mvc,spring-boot,spring-data,spring-restcontroller,lightadmin,Spring Mvc,Spring Boot,Spring Data,Spring Restcontroller,Lightadmin,我正在使用LightAdmin 1.1.0.Snapshot和Spring引导。我使用Joda DateTime表示带区域的时间 我可以看到LightAdmin以UTC捕获日期时间,用于解析数据的默认反序列化上下文是由LightAdmin中的UTC捕获的。通过调试,我看到LightAdmin使用自己的ObjectMapper和MessageConverters使用LightAdminRestMvcConfiguration,因此它没有使用Spring引导全局重写器来定制Jackson2Objec

我正在使用LightAdmin 1.1.0.Snapshot和Spring引导。我使用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序列化/转换器以不同方式解决此问题的任何帮助。任何帮助都会很棒

谢谢,
Alex

我解决问题的一种方法是在使用下面的方法加载上下文后重新配置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());
    }
}
@组件
公共类AppContextListener实现ApplicationListener{
@注入
核心属性核心属性;
@凌驾
ApplicationEvent(ContextRefreshedEvent事件)上的公共无效{
GenericWebApplicationContext appContext=getRootApplicationContext(事件);
WebApplicationContext lightAdminWebContext=getWebApplicationContext(appContext.getServletContext(),LightAdminWebApplicationInitializer.SERVLET\u CONTEXT\u ATTRIBUTE\u NAME);
lightAdminWebContext.getBeansOfType(ObjectMapper.class).values().stream()
.forEach(objectMapper->objectMapper.setTimeZone(coreProperties.appTimeZone());
}
私有GenericWebApplicationContext getRootApplicationContext(ContextRefreshedEvent事件){
返回(GenericWebApplicationContext)(event.getApplicationContext().getParent()!=null?event.getApplicationContext().getParent():event.getApplicationContext());
}
}