Предоставление конечной точки на основе REST для приложения Spring Boot или в этом отношении простое приложение Spring MVC является простым, ниже приведен контроллер, предоставляющий конечную точку для создания объекта на основе содержимого, переданного ей в POST:
1
2
3
4
5
6
7
8
9
|
@RestController @RequestMapping ( "/rest/hotels" ) public class RestHotelController { .... @RequestMapping (method=RequestMethod.POST) public Hotel create( @RequestBody @Valid Hotel hotel) { return this .hotelRepository.save(hotel); } } |
Внутренне Spring MVC использует компонент, называемый HttpMessageConverter, для преобразования запроса Http в представление объекта и обратно.
Набор конвертеров по умолчанию регистрируется автоматически, что поддерживает целый ряд различных форматов представления ресурсов — например, json, xml.
Теперь, если есть необходимость каким-либо образом настроить конвертеры сообщений, Spring Boot делает это просто. В качестве примера рассмотрим, должен ли метод POST в приведенном выше примере быть немного более гибким и должен игнорировать свойства, которых нет в сущности Hotel — как правило, это можно сделать путем настройки Jackson ObjectMapper , все, что нужно сделать с помощью Spring Загрузка заключается в создании нового bean-компонента HttpMessageConverter, который в конечном итоге переопределяет все конвертеры сообщений по умолчанию следующим образом:
1
2
3
4
5
6
7
8
|
@Bean public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false ); jsonConverter.setObjectMapper(objectMapper); return jsonConverter; } |
Это хорошо работает для приложения Spring-Boot, однако для простых приложений Spring MVC, которые не используют Spring-Boot, настройка пользовательского конвертера немного сложнее — конвертеры по умолчанию не зарегистрированы по умолчанию, и конечный пользователь должен четко указать регистрацию значений по умолчанию — ниже приведен соответствующий код для приложений на основе Spring 4:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
@Configuration public class WebConfig extends WebMvcConfigurationSupport { @Bean public MappingJackson2HttpMessageConverter customJackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false ); jsonConverter.setObjectMapper(objectMapper); return jsonConverter; } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(customJackson2HttpMessageConverter()); super .addDefaultHttpMessageConverters(); } } |
Здесь WebMvcConfigurationSupport предоставляет способ более тонкой настройки конфигурации уровня MVC приложения на основе Spring. В методе configureMessageConverters пользовательский преобразователь регистрируется, а затем выполняется явный вызов, чтобы убедиться, что значения по умолчанию также зарегистрированы. Немного больше работы, чем для приложения на основе Spring-Boot.
Ссылка: | Настройка HttpMessageConverters с Spring Boot и Spring MVC от нашего партнера JCG Биджу Кунджуммена в блоге all and sundry. |