Spring-hateoas的HAL风格渲染问题

时间:2017-09-19 06:59:11

标签: java spring-boot spring-hateoas

这次我真的很困惑并且坚持了...... 我正在开发一个spring-boot(1.5.3)应用程序,该应用程序使用spring-hateoas库公开具有HAL样式的REST API。某些端点已正常工作并返回HAL链接。目前,我尝试更改另一个端点以使用HAL返回响应,但结果以"collection+json"样式序列化。

到目前为止我发现了什么: 弹簧上下文中有3个ObjectMapper个实例:

  • objectMapper
  • _halObjectMapper
  • halObjectMapper

我用所有这三个转换了响应,发现前两个产生"collection+json"输出("links""rel"),第三个产生预期的HAL样式({{ 1}}没有"_links")。

为什么有三个,我如何检查和控制哪些objectMapper用于呈现响应?我的其他端点如何返回预期的格式?

这是我的简化代码,万一感兴趣:

"rel"

响应应该如下所示:

@RestController
public class SearchController{

    @RequestMapping(value = "/search", produces = { "application/hal+json" }, method = RequestMethod.GET)
    public ResponseEntity<SearchResponse> search(...){
        SearchResponse searchResponse = ...; // search & build response
        return new ResponseEntity<>(searchResponse, HttpStatus.OK);
    }
}

public class SearchResponse {

    @JsonProperty("_meta")
    private PageSortInfo meta;

    @JsonUnwrapped
    private Resources<Resource<SearchResultItem>> resultlist;

    ...// getters & setters
}

1 个答案:

答案 0 :(得分:0)

好吧,经过谷歌搜索结果,sprint-boot代码和大量试用版之后的另一天。错误我终于找到了答案,这当然是微不足道的:

Spring将选择用于将响应对象转换为适当格式的MessageConverter,方法是将已注册的转换器与对象的类型(在我的情况下为SearchResponse)和响应类型({{ 1}}对我来说)。仅当响应对象的类型为"application/hal+json"时,才会选择halJacksonHttpMessageConverter。所以我所要做的就是让ResourceSupport扩展SearchResponse并获得预期的响应格式。

ResourceSupport