Использование Hateoas: сгенерирован не соответствующий JSON-запрос - PullRequest
0 голосов
/ 27 августа 2018

Здравствуйте, дорогой переполнение стека !!! :)

У меня есть небольшая проблема. Я пытаюсь использовать приложение на основе Hateoas в проекте, и у меня возникают проблемы с Hateoas, и он генерирует ошибочный JSON-запрос для теста. Я приведу несколько примеров кода!

По сути, я использую JSONconverter, который пытается преобразовать мое тело запроса (post) в JSON, но выдает ошибку с тем, что я на самом деле получаю. Некоторая информация и код:

Вот мой ObjectMapper, который я использую:

ObjectMapper objectMapper = (ObjectMapper) bean;
objectMapper.registerModules(new Jackson2HalModule());

Вот моя конфигурация конвертера, в которую я подключаю объектный сопоставитель и поддерживаемые типы носителей:

MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Arrays.asList(MediaTypes.HAL_JSON, MediaType.APPLICATION_OCTET_STREAM, MediaType.APPLICATION_JSON_UTF8));
converter.setObjectMapper(objectMapper);

Вот мой RestTemplate, где я подключил только что созданный конвертер Джексона 2:

@Bean
public RestTemplate uttagRestTemplate(RestTemplateBuilder builder) {

return builder.messageConverters(mappingJackson2HttpMessageConverter, new StringHttpMessageConverter(Charset.forName("UTF-8")))

Вот тест, который я запускаю с выводом:

mockServer.expect(requestTo(url + "/person/" + id + "/links")).andExpect(header("Content-type", MediaType.APPLICATION_JSON_UTF8.toString()))
            .andExpect(header("accept", MediaType.APPLICATION_JSON_UTF8.toString()))
            .andExpect(content().string(jsonConverter.toJson(Arrays.asList(link)))).andExpect(method(HttpMethod.POST)).andRespond(withSuccess());

Наконец, вот мой тестовый вывод (не обращайте внимания на данные, это просто тестовые данные):

Expected :[{"id":2112,"rel":"EZyb","href":"dspK0XickvvcMw0","type":"RaAmwWkZHlagrcQ","length":992539719,"title":"OuaRoPRClRpvprg"}]
Actual   :"[{\"id\":2112,\"rel\":\"EZyb\",\"href\":\"dspK0XickvvcMw0\",\"type\":\"RaAmwWkZHlagrcQ\",\"length\":992539719,\"title\":\"OuaRoPRClRpvprg\"}]"

Кажется, что-то действительно странное с "настоящим" сгенерированным json телом. Я бы хотел, чтобы это соответствовало моим ожиданиям, но не повезло.

Я пытался решить эту проблему, и если я удаляю MediaType.HAL_JSON из моего MappingJacksonConverter, он каким-то образом работает в моих тестах, но тогда я не могу использовать клиент hateoas. Мне нужен тип носителя, чтобы он работал.

Я также пытался записать свой ожидаемый JSON с помощью моего писателя MappingJackson, но он выдает точно такой же ожидаемый результат.

Кто-нибудь знает, что здесь происходит, и может помочь мне с этим? Знаете ли вы, как я могу сгенерировать правильное JSON-тело, чтобы заставить работать утверждение? Честно говоря, это делает мою голову - и выбор между функционированием тестов без типа носителя и возможностью использовать приложение hateoas с ним, очевидно, не вариант для меня. (

Спасибо за чтение, если вы сделали это так далеко! :) Любые указатели приветствуются.

1 Ответ

0 голосов
/ 29 августа 2018

Я понял, что это было. Кажется, что с новым конфигом приложение автоматически конвертируется в json, и мне больше не нужно было использовать мой собственный jsonConverter. Итак, что происходило в основном как преобразование toJson для уже jsonified объекта.

После удаления моей собственной реализации jsonconverter она теперь работает правильно.

...