如何使用jackson使用feign反序列化?

mftmpeh8  于 2021-08-25  发布在  Java
关注(0)|答案(0)|浏览(552)

我有一个第三方端点,它返回xml格式的数据,内容类型为 text/xml;charset=UTF-8 . 我想使用feign点击这个端点,并将xml反序列化到我的pojo中。
我发布了另一个关于从示例xml文件反序列化的问题(我得到了所需的答案)。然而,当使用feign时,建议的解决方案不起作用。
这是端点返回的xml。

<?xml version="1.0"?>
<Records>
    <Record>
        <Prop name="commerce">sku1</Prop>
        <Prop name="commerce">sku2</Prop>
        <Prop name="commerce">sku3</Prop>
        <Prop name="commerce">sku4</Prop>
    </Record>
    <Record>
        <Prop name="commerce">sku10</Prop>
        <Prop name="commerce">sku20</Prop>
        <Prop name="commerce">sku30</Prop>
        <Prop name="commerce">sku40</Prop>
    </Record>
</Records>

这是我的外文服务和相应的外文配置,我从openfeign文档本身获得。

@FeignClient(value = "api-service", url = "http://localhost:3000", configuration = MyFeignConfig.class)
public interface MyFeignService {

    @GetMapping(value = "/skus", consumes = "text/xml")
    Records getData();

}

@Configuration
public class MyFeignConfig {

    @Bean
    public Decoder feignDecoder() {
        JAXBContextFactory jaxbFactory = new JAXBContextFactory.Builder()
                .withMarshallerJAXBEncoding("UTF-8")
                .build();
        return new JAXBDecoder(jaxbFactory);
    }
}

这些是我的POJO(为了简洁起见,去掉了getter和setter)

public class Records {
    @JsonProperty("Record")
    private List<Record> records;
}

public class Record {
    @JsonProperty("Prop")
    private List<Prop> props;
}

public class Prop {
    @JsonProperty("name")
    private String name;

    @JacksonXmlText
    private String text;
}

这就是我如何称呼外号的

...
Records records = myFeignService.getData();
...

这是实现类似内容的正确方法吗?这似乎不起作用,无论我试图做什么来修复它,最终都会出现一些新问题。因此,我想知道是否有一种更简单的方法可以使用feign命中端点并将响应反序列化到我的java对象中?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题