@JsonProperty salva el día

En un artículo anterior expuse algunas convenciones sobre nombres de clases, métodos, interfaces, variables y constantes en java. Esta es una práctica importante que define nuetro compromiso con el código que desarrollamos y nuestra profesionalidad, recordado parte del artículo en el apartado “Convenciones para nombrar una variable” su primer aspecto nos dicta:

En un artículo anterior expuse algunas convenciones sobre nombres de clases, métodos, interfaces, variables y constantes en java. Esta es una práctica importante que define nuestro compromiso con el código que desarrollamos y nuestra profesionalidad, recordado parte del artículo en el apartado “Convenciones para nombrar una variable” su primer aspecto nos dicta:

  • Primera letra en minúscula.

incluso podemos encontrar blibliografías donde se recomienda poner las dos primeras letras de una propiedad, atributo o variable en minúscula. Y si nos preguntamos, qué sucede cuando no hacemos caso de esta convención y definimos alguna variable con la primera letra en mayúscula ?:

public class Persona{
   private String Name;
}

A primera vista todo bien, pero varios errores podrían ser desatados por desafiar la ira de los dioses de las convenciones:

Si intentamos un POST a la entidad Persona, pasando el siguiente parámetro:

{
  "Name": "Pepe"
}

El comportamiento sería que el atributo “Name” sería parseado a su primera letra en minúscula y buscado en la entidad Persona, efectivamente en este caso el atributo “name” no existe por lo que obtendríamos un error. 400 “Campo no reconocido“.

Nada, que sería mejor haber escrito el atributo con minúscula y ya! Pero tranquilos aquí les va la solución al problema, lo que les propongo es el uso de Jackson API:

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
</dependency>  	

Instalada la dependencia procedemos a añadir la anotación @JsonProperty al atributo:

public class Persona{
   @JsonProperty("Name")
   private String Name;
}

Luego de este paso, ya no tendremos problemas para ejecutar acciones sobre el objeto Persona usando el atributo “Name”, exactamente como fue escrito en su definición.

Nunca dejen de aprender, esa es una libertad irrefutable, nos vemos!