【问题标题】:Convert List of Enums to List of String for Spring @RequestParam using feign client使用 feign 客户端将枚举列表转换为 Spring @RequestParam 的字符串列表
【发布时间】:2022-01-12 22:57:09
【问题描述】:

我有一个这样的枚举类:

ONE("1", "Description1"),
TWO("2", "Description2");

String value;
String description;
MyEnum(String value, String description) {
    this.value  = value;
    this.description = description;
}

@Override
public String toString() {
    return this.value;
}
    
@JsonValue
public String value() {
    return this.value;
}

我正在与之交互的 API 需要一个 String 类型的参数,并且值可以用逗号分隔。

例如:api.com/test?param1=1,2 我用 url api.com/test 配置了一个 feign 客户端 然后像这样创建了一个 POJO

public class POJO {
    private List<MyEnum> param1;
}

在我的假客户中,我有:

@RequestMapping(method = RequestMethod.GET)
MyResponse getResponse(@SpringQueryMap POJO request);

在通过某种 Spring 方法进行 API 调用之前,是否可以以某种方式将枚举列表转换为字符串列表?

截至目前,当我传递一个枚举列表时,它只考虑此列表中的最后一个枚举。

更新:我使用@JsonSerialize(converter=abc.class) 注释了要转换为列表的属性。但是@SpringQueryMap 似乎并不尊重该序列化..

【问题讨论】:

    标签: java spring-cloud-feign feign


    【解决方案1】:

    可以,您需要创建一个拦截器并在该方法中进行映射。 这个话题可能适合你。

    Spring - Execute code before controller's method is invoked

    【讨论】:

    • 请提供更多详细信息,说明您的答案对原始问题的实际帮助。谢谢!
    【解决方案2】:

    原来@JsonSerialize 不能与@SpringQueryMap 一起使用 所以我确实必须添加一个拦截器。

    像这样:

    public class MyInterceptor implements RequestInterceptor {
        @Override
        public void apply(RequestTemplate requestTemplate) {
            if(requestTemplate.queries().containsKey("param1")) {
                requestTemplate.query("param1", convert(requestTemplate.queries().get("param1")));
            }
        }
        //convert list to a string
        public String convert(Collection<String> values) {
           final String s = String.join(",", values.stream().map(Object::toString).collect(Collectors.toList()));
           return s;
        }
    }
    

    然后在我的 Feign 配置类中添加了这个:

    @Bean
    public MyInterceptor myInterceptor() {
        return new MyInterceptor();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多