2015-01-13 4 views
0

Я работаю над проектом, который использует Spring framework и Jackson. Однако я не смог найти место, где он подключен. Я просмотрел множество примеров в Интернете, и большинство из них используют bean класса org.springframework.http.converter.json.MappingJacksonHttpMessageConverter, чтобы разрешить десериализацию @ResponseBody. Итак, я не смог найти ссылки на MappingJacksonHttpMessageConverter.Автоматическое обнаружение Jackson for Spring

Мой вопрос: Будет ли весна каркаса автоматически использовать Джексон, если он найдет его на своем пути класса, чтобы преобразовать JSON в объект @ResponseBody?

Каковы другие способы использования Джексона?

ответ

4

Если вы подключите свой весенний проект с помощью @EnableWebMvc или через XML с помощью тега <mvc:annotation-driven />, вы включите множество функций. Вы можете прочитать подробный список функций в original Spring docs.

Одной из функций, которые включены, является поддержка параметров метода @RequestBody и возвращаемых значений метода @ResponseBody. Это делается через компонент HttpMessageConverter, и функция включена для методов, которые аннотируются с помощью @RequestMapping или @ExceptionHandler.

Ниже перечислены преобразователи, которые зарегистрированы по умолчанию:

  • ByteArrayHttpMessageConverter преобразует массивы байтов.
  • StringHttpMessageConverter конвертирует строки.
  • ResourceHttpMessageConverter конвертирует в/из org.springframework.core.io.Resource для всех типов медиа.
  • SourceHttpMessageConverter конвертирует в/из javax.xml.transform.Source.
  • FormHttpMessageConverter преобразует данные формы в/из MultiValueMap.
  • Jaxb2RootElementHttpMessageConverter преобразует объекты Java в/из XML - добавляется, если JAXB2 присутствует в пути к классам.
  • MappingJackson2HttpMessageConverter (или MappingJacksonHttpMessageConverter) конвертирует в/из JSON - добавляется, если на пути к классу присутствует Jackson 2 (или Jackson).
  • AtomFeedHttpMessageConverter конвертирует каналы Atom - добавляется, если Рим присутствует на пути к классам.
  • RssChannelHttpMessageConverter конвертирует RSS-каналы - добавляется, если Рим присутствует на пути к классам.

Так что, если у вас есть веб включен проект с Джексоном, имеющихся на пути к классам, Spring будет автоматически преобразовывать возвращаемые значения из контроллера-метода, который с аннотацией @ResponseBody (если клиент абонент принимает JSON, что есть что означает, что заголовок accept обычно должен быть установлен в application/json).

Если вы хотите переопределить HttpMessageConverter S можно реализовать следующее:

@Configuration 
@EnableWebMvc 
public class YourConfiguration extends WebMvcConfigurerAdapter { 
    @Override 
     public void configureMessageConverters(
       List<HttpMessageConverter<?>> converters) { 

      // Do your magic, override your stuff 
     } 
} 

За хорошее введение о том, как настроить, например, Конвертер Джексона вы можете прочитать this article from DZone about Customizing HttpMessageConverters with Spring Boot and Spring MVC.

+0

Спасибо! Это то, что я искал! – Tom

+0

Могу ли я переопределить MappingJackson2HttpMessageConverter, если мне нужна настройка? – Tom

+1

Ну, вы можете, например, проверить [этот выход] (http://java.dzone.com/articles/customizing) – wassgren