如何在 FeignClient 响应 json 中解析 snake case 字段?
How do I parse snake case fields in a FeignClient response json?
我在我的 spring 启动 web 应用程序中配置了一个 FeignClient,我在其中调用一个外部 api returns 以下对象。
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));
}
}
字段updatedAt
、createdAt
和closedAt
都是蛇形。所有多词字段都显示为空。有什么方法可以配置 FeignClient 的 Jackson 解析器,以便它可以处理蛇形字符?请注意,我无法更改 spring 引导 web 应用程序的默认 Jackson 解析器,因为我自己在驼峰式大小写中呈现 json。我只需要在我用来连接到外部 REST api.
的 FeignClient 上配置这个解析器
我已验证从 api 调用返回的 json 响应在每个 json 字段中包含有效值。
我是这样解决的。我创建了一个自定义的 JacksonParser 作为 Spring Bean。
@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 case 属性。
请注意,这有一个严格的限制。如果您有多个 FeignClients
而其中只有一个 returns 蛇形箱 json,那么您就不走运了。这会覆盖默认的 FeignClient
配置。此解决方案唯一可行的解决方法是将您的 FeignClient
调用移动到单独的微服务中,这样其他 FeignClient
调用就不会受到影响。
我在我的 spring 启动 web 应用程序中配置了一个 FeignClient,我在其中调用一个外部 api returns 以下对象。
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));
}
}
字段updatedAt
、createdAt
和closedAt
都是蛇形。所有多词字段都显示为空。有什么方法可以配置 FeignClient 的 Jackson 解析器,以便它可以处理蛇形字符?请注意,我无法更改 spring 引导 web 应用程序的默认 Jackson 解析器,因为我自己在驼峰式大小写中呈现 json。我只需要在我用来连接到外部 REST api.
我已验证从 api 调用返回的 json 响应在每个 json 字段中包含有效值。
我是这样解决的。我创建了一个自定义的 JacksonParser 作为 Spring Bean。
@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 case 属性。
请注意,这有一个严格的限制。如果您有多个 FeignClients
而其中只有一个 returns 蛇形箱 json,那么您就不走运了。这会覆盖默认的 FeignClient
配置。此解决方案唯一可行的解决方法是将您的 FeignClient
调用移动到单独的微服务中,这样其他 FeignClient
调用就不会受到影响。