【问题标题】:How to use a @FeignClient to map a HAL JSON _embedded collection如何使用 @FeignClient 映射 HAL JSON _embedded 集合
【发布时间】:2017-03-09 14:34:24
【问题描述】:

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

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

主要取自this post,我们使用经常提到的Jackson2HalModule 实现了一个自定义的Feign Decoder 和对应的ObjectMapper,但这仍然不能解决我们的问题。

您可以使用this sample project 重现该问题,其中对问题进行了更详细的描述。

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

【问题讨论】:

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


    【解决方案1】:

    我认为理解如何反序列化的关键是您的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();
        }
    }
    

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

    【讨论】:

    • @megli 有帮助吗?
    【解决方案2】:

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

    【讨论】:

    • 像“您必须将.....添加到....”这样更肯定的文字将有助于不将此答案混淆为“不是答案”
    • @Steve,感谢您的反馈。当有人花时间向我展示如何做得更好时,我认为这是一种礼物。我已修改我的答案以纳入您的建议。
    • 我告诉你这个是因为你的答案已经被寻找“不是答案”证据的 BOT 捕获了。见chat.stackoverflow.com/transcript/message/50800235#50800235我们已经表示这是一个“误报”,但仍然......
    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 2015-03-18
    相关资源
    最近更新 更多