当前位置: 首页 > 知识库问答 >
问题:

我如何解析蛇的情况下字段在一个FaignClient响应json?

刘向阳
2023-03-14

我在我的Spring引导webapp中配置了一个FaignClient,在那里我调用一个返回以下对象的外部api。

public class Issue {

    private Assignee assignee;
    private Date createdAt;
    private Date updatedAt;
    private Date closedAt;
    private String description;
    private Date dueDate;

    public Assignee getAssignee() {
        return assignee;
    }

    public void setAssignee(Assignee assignee) {
        this.assignee = assignee;
    }


    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Date getDueDate() {
        return dueDate;
    }

    public void setDueDate(Date dueDate) {
    this.dueDate = dueDate;
    }

    public Date getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(Date updatedAt) {
        this.updatedAt = updatedAt;
    }

    public Date getClosedAt() {
        return closedAt;
    }

    public void setClosedAt(Date closedAt) {
        this.closedAt = closedAt;
    }


    @Override
    public String toString() {
        return (JacksonJson.toJsonString(this));
    }
}

字段updatedAtcreatedAtclosedAt都是蛇型的。所有多字字段显示为空。有没有办法配置佯装客户端的Jackson解析器,使其能够处理蛇形字符?请注意,我无法更改spring boot webapp的默认Jackson解析器,因为我自己以驼峰格式呈现json。我只需要在我用来连接外部RESTAPI的假客户端上配置这个解析器。

我已经验证了api调用返回的json响应在每个json字段中都包含有效值。

共有1个答案

姚嘉容
2023-03-14

我是这样解决的。我创建了一个定制的JacksonParser作为Springbean。

@Configuration(proxyBeanMethods = false)
public class FeignClientDateFormatConfig {

    @Bean
    public Decoder feignDecoder() {
        HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter(customObjectMapper());
        ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(jacksonConverter);
        return new ResponseEntityDecoder(new SpringDecoder(objectFactory));
    }

    public ObjectMapper customObjectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        return objectMapper;
    }
}

这将成功解析所有snake案例属性。

请注意,这有一个严重的限制。如果您有多个假客户端,并且其中只有一个返回snake-case json,那么您就不走运了。这将覆盖默认的佯装客户端config。此解决方案唯一可行的解决方法是将您的FeignClient调用移动到单独的微服务中,以便其他FeignClient调用不受影响。

 类似资料:
  • 这是我的建筑。格雷德尔: 我试图找出问题所在,使用以下代码来分析问题: 结果是:

  • 问题内容: 使用Google Geocoder v3,如果我尝试对20个地址进行地理编码,除非得到的时间间隔约为1秒,否则我将获得OVER_QUERY_LIMIT,但是所有标记都需要20秒才能放置完。 除了预先存储坐标以外,还有其他方法吗? 问题答案: 不,实际上没有其他方法:如果您有很多位置,并希望在地图上显示它们,最好的解决方案是: 创建位置后,使用地理编码器获取纬度+经度 将它们与地址一起存

  • 当kotlin在每个块中更改其类型时,如何从json响应中解析answerData键?我试图保留它,但无法键入cast。如何解析应答数据?

  • 我正在基于Tomcat servlet和NIO创建服务。输入时有大的XML请求(约100 MB),通过HTML POST方法发送。我只想流前8千磅,然后立即发送响应到客户端。 当我尝试发送小请求(内容中只有几行)时,套接字工作正常。 2016-02-01 10:44:52 Http11NioProtocol[DEBUG]套接字:[org.apache.tomcat.util.net.NioEndp

  • 问题内容: 是否可以为类型选择性地启用elasticsearch字段的索引? 通过特定索引的映射设置,可以设置属性 {“ index”:“ not_analyzed”} 对于特定领域。由于我的文档中的字段太多,并且将来可能会更改结构,因此我需要一个映射,除非另行指定,否则默认情况下不会分析字段。 这可能吗? 问题答案: 是的- 看一下动态模板 请尝试以下操作: 动态模板适用于您的映射未涵盖的新字段

  • 问题内容: 这是我的课: 我可以通过将以下内容放在ProGuard规则文件中来保留这些私有字段: 但我不想不必单独指定每个字段。我怎样才能做到这一点? 问题答案: 根据ProGuard文档,通配符可匹配任何字段。因此应该是这样的: 如果要在所有类中保留私有字段,请使用: