es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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…

Tags:  , ,

Answer

  1. Avatar for 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:

    public class MyEnumListToStringConverter implements Converter<><myenum>, List<string>> {
    
        @Override
        public List<string> convert(List<myenum> enums) {
            List<string> values = new ArrayList<>();
            for (MyEnum e : enums) {
                values.add(e.toString());
            }
            return values;
        }
    }
    

    A continuación, puedes anotar el campo del POJO con la anotación @JsonSerialize y proporcionar el convertidor personalizado:

    public class POJO {
        @JsonSerialize(converter = MyEnumListToStringConverter.class)
        private List<myenum> param1;
    }
    

    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.

Comments are closed.