Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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
Java Jackson ObjectMapper忽略Hibernate5模块_Java_Hibernate_Spring Boot_Jackson_Mapping - Fatal编程技术网

Java Jackson ObjectMapper忽略Hibernate5模块

Java Jackson ObjectMapper忽略Hibernate5模块,java,hibernate,spring-boot,jackson,mapping,Java,Hibernate,Spring Boot,Jackson,Mapping,我有以下杰克逊配置 @Configuration public class JacksonConfiguration { @Bean public JavaTimeModule javaTimeModule() { return new JavaTimeModule(); } @Bean public Jdk8Module jdk8TimeModule() { return new Jdk8Module(); }

我有以下杰克逊配置

@Configuration
public class JacksonConfiguration {
    @Bean
    public JavaTimeModule javaTimeModule() {
        return new JavaTimeModule();
    }

    @Bean
    public Jdk8Module jdk8TimeModule() {
        return new Jdk8Module();
    }

    @Bean
    public Hibernate5Module hibernate5Module() {
        return new Hibernate5Module();
    }

    @Bean
    public AfterburnerModule afterburnerModule() {
        return new AfterburnerModule();
    }

    @Bean
    ProblemModule problemModule() {
        return new ProblemModule();
    }

    @Bean
    ConstraintViolationProblemModule constraintViolationProblemModule() {
        return new ConstraintViolationProblemModule();
    }

}
然后,我添加了一个JsonUtil类,该类使用JacksonConfiguration.class中描述的模块创建一个对象映射器对象

@RequiredArgsConstructor
public class JsonUtil {

    private static ObjectMapper mapper;

    public static synchronized ObjectMapper getObjectMapper() {
        if (mapper == null) {
            mapper = new ObjectMapper();
            mapper.registerModule(new JavaTimeModule());
            mapper.registerModule(new Jdk8Module());
            mapper.registerModule(new Hibernate5Module());
            mapper.registerModule(new AfterburnerModule());
            mapper.registerModule(new ProblemModule());
            mapper.registerModule(new ConstraintViolationProblemModule());
        }
        return mapper;
    }
现在,只要调用REST控制器,就会调用objectmapper的实现(JsonUtil.mapper)

问题是我有一个Instant变量类型的类,以前的版本将其反序列化为datetime(或者由于数据库中的值是datetime而保持不变),当前的实现反序列化为epoch time

public class SomeClass  {

    // ...

    @NotNull
    @Column(name = "column3", nullable = false)
    private Instant someVariable;
}
在“someVariable”之前:“2018-10-23T08:11:00Z”
“SomeVariable”之后:1540282260

为什么Jackson不能像以前一样序列化这个变量,尽管我已经注册了JacksonConfiguration类中的所有模块


springBoot:2.0.8

删除
JsonUtil
插孔配置
。只需添加您想要注册的其他模块,Spring Boot就会自动获取这些模块并配置jackson。您当前的方法禁用了导致此问题的Jackson的默认Spring(Boot)设置。@M.Deinum JsonUtil无法删除,因为将有fromJson、toJson方法。每个方法都将使用getObjectMapper()方法来获取对象映射器。使用这种方法可以保证spring和定制JsonUtil方法将使用相同的映射器。spring Boot已经解决了这个问题。您应该使用框架,您正试图围绕框架进行编码,从而导致问题。只需注入一个
ObjectMapper
,您就会得到一个预先配置好的实例。@M.Deinum对于不可能注入的静态方法呢?首先应该将其视为设计缺陷。如果您真的想要这些,您可以滥用
JsonUtil
,让它使用
ObjectMapper
,并将其作为
static
变量提供。但首先我会认为这是一个设计缺陷。
public class SomeClass  {

    // ...

    @NotNull
    @Column(name = "column3", nullable = false)
    private Instant someVariable;
}