您好,亲爱的堆栈溢出!!! :)
我有点问题。我试图在项目中使用基于Hateoas的应用程序,但是Hateoas遇到了问题,它生成了错误的JSON请求以进行测试。我将提供一些代码示例!
基本上,我使用JSONconverter尝试将我的请求正文(帖子)转换为JSON,但实际上却抛出了错误。一些信息和代码:
这是我正在使用的ObjectMapper:
ObjectMapper objectMapper = (ObjectMapper) bean;
objectMapper.registerModules(new Jackson2HalModule());
这是我的转换器配置,在其中插入objectmapper和支持的媒体类型:
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Arrays.asList(MediaTypes.HAL_JSON, MediaType.APPLICATION_OCTET_STREAM, MediaType.APPLICATION_JSON_UTF8));
converter.setObjectMapper(objectMapper);
这是我的RestTemplate,在其中插入刚刚制作的Jackson 2 Http Converter:
@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生成的主体确实有些奇怪。我想让它符合我的期望,但是没有运气。
我已经尝试解决此问题,如果我以某种方式从我的MappingJacksonConverter中删除MediaType.HAL_JSON,那么它可以在我的测试中工作,但是我不能使用hateoas客户端。我需要那里的媒体类型才能工作。
我也尝试过用MappingJackson编写器编写期望的JSON,但它会产生完全相同的期望输出。
有人知道这是怎么回事,可以帮助我吗?您知道我如何生成正确的JSON-body以使断言起作用吗?坦率地说,这是我的努力-在没有媒体类型的功能测试之间进行选择,以及能够使用它来使用hateoas应用程序显然对我来说不是一个选择。 :(
如果您能做到这一点,请为他们加油打气! :)欢迎使用任何指针。
答案 0 :(得分:0)
我弄清楚是什么。使用新的配置,似乎该应用程序会自动转换为json,而我不再需要使用自己的jsonConverter了。因此,基本上是在已经被jsonified的对象上进行toJson转换。
在删除我自己的jsonconverter实现之后,它现在可以正常运行。