Здравствуйте, дорогой переполнение стека !!! :)
У меня есть небольшая проблема. Я пытаюсь использовать приложение на основе 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 с ним, очевидно, не вариант для меня. (
Спасибо за чтение, если вы сделали это так далеко! :) Любые указатели приветствуются.