- 关闭默认hal序列化选项,在配置文件中加上如下设定
spring.hateoas.use-hal-as-default-json-media-type=false
此设定会使hateoas不再处理application/json的序列化,这样就可以针对application/json和application/hal+json分开处理。
- 在Controller的注解上指明支持json和hal两种格式,如下produces设置:
@GetMapping(value = "/goods-categories", produces = {MediaTypes.HAL_JSON_VALUE, MediaType.APPLICATION_JSON_VALUE})
- 对于输出Model中原来通过JsonProperty(access = JsonProperty.Access.WRITE_ONLY)屏蔽的输出项,改为通过@JsonInclude(JsonInclude.Include.NON_NULL)屏蔽,如下例:
// @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) @JsonInclude(JsonInclude.Include.NON_NULL) private List<GoodsCategory> childCategory = new ArrayList<>();
- 调用方提交请求时如果明确指出需要何种类型格式数据,通过设置Header中的Accept为application/json或application/hal+json来实现,如未指定此请求头,或指定的请求头中不包含这两个格式,则默认为HAL格式输出,如果指定了请求头Accept: application/json则返回为JSON格式。