Как я могу получить экземпляр ObjectMapper в Spring Boot без наследования от spring-boot-starter-web?

Я играю с Spring Boot 2.0.0M2, пытаясь создать приложение CLI, а не веб-приложение. Моя проблема в том, что даже включая

  compile 'org.springframework.boot:spring-boot-starter'
  compile 'org.springframework.boot:spring-boot-starter-json'

в моей сборке ObjectMapper не создается Boot, потому что

Bean method 'jacksonObjectMapper' not loaded because @ConditionalOnClass did not find required class 'org.springframework.http.converter.json.Jackson2ObjectMapperBuilder'

Что лучше всего, если вы хотите иметь экземпляр Spring Boot и настроить Jackson, но не хотите запускать веб-сервер?


person Serandel    schedule 28.06.2017    source источник
comment
Разве ты не можешь просто добавить банку?   -  person K.Nicholas    schedule 28.06.2017
comment
Возможный дубликат настройки ObjectMapper весной   -  person ledniov    schedule 28.06.2017
comment
Дело в том, что Spring Boot автоматически настраивает ObjectMapper, и его можно настроить с помощью нескольких хорошо задокументированных свойств конфигурации. Если я создам ObjectMapper, как предлагает другой вопрос, все это должно быть сделано вручную, если я не ошибаюсь.   -  person Serandel    schedule 28.06.2017
comment
Загрузка Spring без веб-стартера не инициализирует ObjectMapper. Это глупо, они предполагают, что вы не будете использовать JSON вне HTTP: github.com / spring-projects / spring-boot / issues / 10031   -  person Leos Literak    schedule 23.03.2019


Ответы (3)


Вы можете добавить spring-boot-starter-json, если не хотите включать полный веб-стек (начиная с Spring Boot v.2.0.0M4).

person Fervento    schedule 05.06.2019
comment
Это сработало для меня. Спасибо. Оптимальное решение в будущем? - person khwilo; 17.08.2019

Почему бы вам просто не инициализировать его самостоятельно.

@Bean
ObjectMapper objectMapper() {
    return new ObjectMapper();
}
person Leonard Brünings    schedule 29.06.2017
comment
Моя проблема в том, что, как я сказал в предыдущем комментарии, Spring Boot автоконфигурирует ObjectMapper с несколькими хорошо задокументированными свойствами конфигурации. Если я использую это самостоятельно, вся эта настройка будет потеряна, если я не ошибаюсь. - person Serandel; 29.06.2017
comment
Да, вам нужно сделать это вручную, но это не так уж сложно, и, глядя на исходный код Jackson2ObjectMapperBuilder, похоже, не установлено никаких значений по умолчанию. Он автоматически обнаруживает некоторые хорошо известные модули, но добавить их вручную не так уж и сложно. Если вы действительно хотите, вы можете скопировать java в свой код, это ASL2, но я бы просто использовал свою собственную оболочку объекта. - person Leonard Brünings; 29.06.2017
comment
Но это должно работать, просто используя @Autowired ObjectMapper objectMapper. Если мы инициализируем его сами, это не будет разумным решением, верно? - person liyuhui; 08.11.2018

Вы можете попробовать и ПРОСТО добавить org.springframework:spring-web зависимость, поскольку этот класс находится в ней.

person Strelok    schedule 29.06.2017
comment
Но если это просто Java-приложение, а не веб-приложение, что мне делать? - person liyuhui; 08.11.2018
comment
github.com/spring-projects/spring-boot/issues/10031 Имеется некоторая предыстория и обоснование для этого. - person Adrian Baker; 05.05.2019