Я пытаюсь зарегистрировать медиа-тип "application / vnd.contactdir.v1 + json", но ничего не происходит, и я продолжаю получать не-HAL json.
Вот мой поставщик медиа-типа,
public class ContactDirMediaTypeConfigurationProvider implements MediaTypeConfigurationProvider {
@Override
public Class<? extends HypermediaMappingInformation> getConfiguration() {
return ContactDirMediaTypeConfiguration.class;
}
@Override
public boolean supportsAny(Collection<MediaType> mediaTypes) {
return true;
}
}
настройка типа носителя
@Configuration
public class ContactDirMediaTypeConfiguration implements HypermediaMappingInformation {
@Override
public List<MediaType> getMediaTypes() {
return MediaType.parseMediaTypes("application/vnd.contactdir.v1+json");
}
}
и метод контроллера
@GetMapping(path = "/contacts",
produces = {"application/vnd.contactdir.v1+json", "application/hal+json"})
public ResponseEntity<CollectionModel<ContactDto>> getAllContacts() {
List<ContactDto> list = contactListService.getAllContacts();
CollectionModel<ContactDto> collectionModel = linkAppender.appendLinks(list);
collectionModel.add(
linkTo(methodOn(ContactListController.class).getAllContacts()).withSelfRel());
return new ResponseEntity<>(collectionModel, HttpStatus.OK);
}
Я заметил кое-что странное при выводе списка конвертеров сообщений : некоторые из них повторялись дважды, и у одного был мой тип медиа (с индексом 1). И если во всех из них я установил SupportMediaType для моего типа, json вывод getAllContacts () будет иметь правильный HAL, но я хочу, чтобы регистрация настраиваемого типа работала, как описано в документации . Чего мне не хватает?
ОБНОВЛЕНИЕ 1
После дополнительных исследований я выяснил, что присутствие моего типа в первом TypeConstrainedMapperJackson2HttpMessageConverter дает только правильный результат, но вместе с этим Я полностью запутался.
ОБНОВЛЕНИЕ 2
Теперь я попытался заменить ObjectMapper из первого преобразователя на ObjectMapper из второго, и вывод стал правильным. Похоже, проблема в преобразователе, который поддерживает мой тип носителя. Я изменил его тип конфигурации:
@Configuration
public class ContactDirMediaTypeConfiguration implements HypermediaMappingInformation {
@Override
public Module getJacksonModule() {
return new Jackson2HalModule();
}
@Override
public List<MediaType> getMediaTypes() {
return MediaType.parseMediaTypes("application/vnd.contactdir.v1+json, application/hal+json");
}
}
, но все равно ничего. Затем я сравнил (вручную, через отладку, как мог) рабочий маппер с предоставленным выше конфигом и не обнаружил различий. Стоит отметить, что замена сопоставителей работает только в том случае, если добавлено @EnableHyperMediaSupport. В другом случае это не так.