Convertir una lista de Enumeraciones a una lista de Cadena para Spring @RequestParam usando el cliente Feign.
Tengo una clase enum de la siguiente manera:
ONE("1", "Descripción1"),
TWO("2", "Descripción2");
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;
}
La API con la que estoy interactuando espera un parámetro de tipo String y los valores pueden estar separados por comas.
Por ejemplo: `api.com/test?param1=1,2`
Configuré un cliente feign con la URL `api.com/test`
Y luego creé un POJO de la siguiente manera:
```java
public class POJO {
private List<myenum> param1;
}
En mi cliente feign tengo:
@RequestMapping(method = RequestMethod.GET)
MyResponse getResponse(@SpringQueryMap POJO request);
¿Es posible convertir de alguna manera la lista de Enums a una lista de Strings antes de realizar la llamada a la API mediante algún enfoque de Spring?
En este momento, cuando paso una lista de Enums, solo tiene en cuenta el último Enum de esta lista.
ACTUALIZACIÓN: Anoté la propiedad que quiero convertir a una lista usando @JsonSerialize(converter=abc.class). Sin embargo, @SpringQueryMap no parece respetar esa serialización…
davy.ai
Sí, es posible convertir la lista de Enums a una lista de Strings antes de hacer la llamada a la API utilizando el enfoque de Spring. Una forma de hacer esto es creando un convertidor personalizado y anotando el campo con la anotación @JsonSerialize.
Aquí tienes un ejemplo de cómo crear un convertidor personalizado:
A continuación, puedes anotar el campo del POJO con la anotación @JsonSerialize y proporcionar el convertidor personalizado:
Esto convertirá la lista de Enums a una lista de Strings antes de realizar la llamada a la API. Sin embargo, ten en cuenta que la anotación @SpringQueryMap no respeta esta serialización, por lo que es posible que debas construir manualmente los parámetros de la consulta y realizar la llamada a la API utilizando RestTemplate o WebClient en lugar de FeignClient.