我想手动将数据类转换为其JSON表示形式。数据类应实现HATEOAS类型链接。可以在以下位置找到测试失败的样本项目:https://github.com/dirkbolte/hateoastest。基本上,我希望以下测试通过:
val dataClass = TestData(
data = "some data",
selfLink = Link.of("http://localhost/self", "self"),
otherLink = Link.of("http://localhost/other", "other"))
val mappedClass: Map<String, Any?> = objectMapper.convertValue(dataClass)
assertThat(mappedClass).hasEntrySatisfying("_links") {
assertThat(it)
.asInstanceOf(InstanceOfAssertFactories.MAP)
.containsEntry("self", "http://localhost/self")
.containsEntry("other", "http://localhost/other")
}
因此,在将链接添加到类之后,我想调用objectMapper.convertValue()
以获取映射的表示形式。它创建一个JSON数组,而不是创建JSON对象,因为它直接映射类的links
成员,而不是使用类型转换器。
看来EnableHypermediaSupport
发起的配置仅注册了WebMVC或Webflux的转换器,并随之调整了objectmapper的副本(请参见https://github.com/spring-projects/spring-hateoas/blob/6a6cd3111363597326478fc1ee4af773f61604bb/src/main/java/org/springframework/hateoas/config/WebConverters.java#L49)。因此原始的objectMapper无法适应。因此,用于HATEOAS类型的类型转换器似乎在控制器响应上下文之外不可用。
我尝试找到一种手动注册模块的方法(使用jacksonObjectMapper().registerModule(Jackson2HalModule())
,但这会导致其他错误,而到目前为止,我发现需要重新实现给定配置的许多内部部分已经为您服务。
我该如何通过考试?