如何使用@FeignClient映射HAL JSON _embedded集合

时间:2017-03-09 14:34:24

标签: spring-data-rest spring-hateoas spring-cloud-netflix feign hal-json

我们正在尝试使用spring-cloud @FeignClient从另一个微服务中调用微服务的HAL-JSON REST API。该服务使用Spring Data Rest,Spring Boot 1.4实现,默认情况下启用了Hateoas。

在客户端使用专用DTO,所有简单属性都已正确映射,但忽略了特定于HAL的_embedded集合。

主要从this post开始,我们使用经常提到的Decoder实现了一个自定义的Feign ObjectMapper和相应的Jackson2HalModule,但这仍然无法解决我们的问题。

您可以使用this sample project 重现该问题,其中会更详细地描述问题。

我们感谢您对此问题的任何帮助或提示!提前致谢

2 个答案:

答案 0 :(得分:0)

我认为理解如何反序列化的关键是你的Customer是嵌入关系的Resources类。因此,您需要将其反序列化为Resources,以便HalResourcesDeserializer选择它。

我让它以这种方式工作。

@Getter
@Setter
public class Customer extends Resources<Resource<Relation>> {

    public static enum Type {
        PERSON, INSTITUTION
    }

    private String displayName;

    private Integer rating;

    private Type type;

    public Collection<Resource<Relation>> getRelations() {
        return this.getContent();
    }
}

这看起来有点奇怪,我不确定这是否是最佳解决方案。

答案 1 :(得分:0)

我知道我正在回答一个老问题,但是根据我的经验,我必须在主/任何配置类中添加state2才能解决此问题。您可以尝试一下并验证它是否适合您。