使用 SpringQueryMap 注解时,如何将 Spring Feign 客户端 GET 请求中的参数转换为蛇形大小写?

问题描述 投票:0回答:2

我有以下 Spring Feign 客户端:

public interface FeignClient {
 @GetMapping("/events/query")
 EventCollectionResponse getAplomadoEvents(@SpringQueryMap EventParameters parameters);
}

随着

EventParameters
实体朝这边看:

public class EventParameters {

    private String order_by;

    private String sort;

    private String start_at;

    private String end_at;
}

外部API接受蛇形命名形式的请求,但我想使用驼峰命名法来命名参数,以维护编码标准。

注释 @JsonProperty("order_by") 在这种情况下没有帮助,因为由于 GET 方法参数,我们在这里不使用 JSON。

spring-boot spring-cloud-feign
2个回答
1
投票

我也遇到了同样的问题,花了 4-5 个小时进行调试。实际上 SpringQueryMap 注解内部调用了多个编码器,并且没有一个编码器查找 JsonProperty 注解值。 解决方案是以下任一

  1. 您实现自己的Encoder bean,它将在内部调用objectmapper,您可以将PropertyNamingStrategy配置为snakecase,然后提供encode方法的实现。
  2. 另一种简单的解决方案是为 feign 客户端的蛇形字段创建一个 getter,并从 feign 包中添加 @Param("your_property") 。例如@Param(“开始时间”)。解决此问题的原因是 - 编码器“BeanQueryMapEncoder”在 getter 方法上查找此 @Param,例如“method.getAnnotation(Param.class)”,如果找到此注释,则它使用作为别名提供的值。这样就解决了问题。

所以,更好的解决方案是第一个,但需要大量的实现,坦率地说,我也跳过了它来修复我的用例。第二个选项需要在 POJO 中进行更改,但可以解决问题。

希望有帮助。干杯。


0
投票

@FormProperty
是 feign 注释,允许设置自定义字段名称。

@Data
public class EventParameters {
    @FormProperty("order_by")
    private String orderBy;

    private String sort;

    @FormProperty("start_at")
    private String startAt;

    @FormProperty("end_at")
    private String endAt;
}
© www.soinside.com 2019 - 2024. All rights reserved.