Jackson Object Mapper не работает при предоставлении расширенной конфигурации, но работает при предоставлении аннотаций уровня класса/поля в Spring Boot

Приведенная ниже конфигурация средства сопоставления объектов не работает, когда я добавляю безопасность jjwt в приложение весенней загрузки.

@Configuration
public class CustomObjectMapper extends ObjectMapper {

/**
 * Default serial version id generated.
 */
private static final long serialVersionUID = 1L;

public CustomObjectMapper() {
    this.setSerializationInclusion(Include.NON_EMPTY);
    this.registerModule(new ThreeTenModule());
    this.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    }
}

Здесь добавлены зависимости безопасности

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.7.0</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-jwt</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.security.oauth</groupId>
    <artifactId>spring-security-oauth2</artifactId>
</dependency>

где приведенные ниже аннотации Джексона работают на уровнях класса/поля.

@JsonInclude(Include.NON_EMPTY) 

Почему для сериализации и десериализации не использовался настраиваемый сопоставитель объектов, настроенный компонентом? Какие-либо другие библиотеки настроили средство сопоставления объектов, переопределяющее мое собственное средство сопоставления?


person Visanth Rajamohan    schedule 21.09.2018    source источник
comment
Пробовал, как показано ниже, но не повезло. @Component public class CustomObjectMapper { @Bean @Primary public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setSerializationInclusion(Include.NON_EMPTY); objectMapper.registerModule(new ThreeTenModule()); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); return objectMapper; } }   -  person Visanth Rajamohan    schedule 22.09.2018


Ответы (1)


После долгого расследования я заметил аннотированный компонент конфигурации @EnableWebMvc, доступный в одной зависимой библиотеке. И узнал из здесь, что @EnableWebMvc отключает автозагрузку Spring Boot MVC. -configuration, что дает полный контроль над конфигурацией MVC клиента. Преобразователи HTTP-сообщений также будут включены в компонент Spring MVC, который, в свою очередь, отключает мою пользовательскую конфигурацию сопоставления объектов Джексона.

PS: поскольку jjwt по умолчанию импортирует зависимость привязки данных Джексона, она попала в мой список подозреваемых. Чувствую себя хорошо, что я мог RCA. Спасибо.

person Visanth Rajamohan    schedule 22.09.2018