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.

Spring cloud open Feign no ignora los valores nulos al codificar.

Estoy trabajando en una aplicación Spring Boot. Estamos utilizando Spring Cloud Open Feign para realizar llamadas REST. Estamos usando la clase GsonEncoder() predeterminada, pero por alguna razón gson no está excluyendo las propiedades nulas al codificar la carga útil.

Configuración:

return Feign.builder()
            .options(ApiOptions())
            .encoder(new GsonEncoder())
            .decoder(new GsonDecoder())
            .target(ApiClient.class, "URL");

Cliente:

@FunctionalInterface
@FeignClient(
    value = "apiTest",
    url = "urlHere"
)
public interface ApiClient {
    @PostMapping("path/to/service")
    AiResponse getDetails(ApiRequest apiRequest);
}

ApiRequest.java:

public class ApiRequest {
    private String userName;
    private String userId;
    private String password;

    //@setters and getters
}

Pero al realizar la solicitud, el cuerpo de la solicitud es:

{
  "userName" : "test",
  "userId" : null,
  "password" : "password"
}

Mi comprensión es que Gson debería eliminar automáticamente los valores nulos al serializar el cuerpo de la solicitud. Pero puedo ver que las propiedades nulas existen en la solicitud.

Incluso intenté utilizar codificadores personalizados (Jackson a continuación):
https://github.com/OpenFeign/feign/blob/master/jackson/src/main/java/feign/jackson/JacksonEncoder.java

Según el enlace anterior, no debería incluir los valores nulos al serializar el requestBody, pero todavía puedo ver que se pasan valores nulos en la solicitud.

A continuación se muestran las dependencias:
Versión de Spring Cloud: 2020.0.2
org.springframework.cloud:spring-cloud-starter-openfeign
io.github.openfeign:feign-gson:9.5.1

Cualquier sugerencia sería realmente útil. ¡Gracias de antemano!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    Para excluir propiedades nulas al codificar la carga útil, puedes utilizar GsonBuilder para personalizar la instancia de Gson utilizada por GsonEncoder.

    Así es como puedes modificar el Encoder para excluir los valores nulos:

    Gson gson = new GsonBuilder().serializeNulls().create();
    
    return Feign.builder()
                .options(ApiOptions())
                .encoder(new GsonEncoder(gson))
                .decoder(new GsonDecoder())
                .target(ApiClient.class, "URL");
    

    Esto creará una instancia personalizada de Gson que serializa valores nulos y la utilizará para construir el GsonEncoder.

    Nota: También puedes configurar otras propiedades de Gson utilizando GsonBuilder. Para obtener más información, consulta la documentación oficial de Gson.

Comments are closed.