Spring Boot (3 Part Series)
1 Conversores personalizados para @RequestBody
2 Conversores personalizados para @RequestParam
3 Anotación @JsonUnwrapped
La anotación @JsonUnwrapped
es una anotación de la biblioteca Jackson para Java que se utiliza para indicar una propiedad no debe estar anidada en la estructura JSON resultante, sino que debe estar a nivel superior.
Por ejemplo, supongamos que tenemos una clase Person
que tiene una propiedad Address
que también es una clase con sus propias propiedades. Si queremos serializar un objeto Person
en JSON, la estructura resultante sería algo así como:
<span>{</span><span> </span><span>"name"</span><span>:</span><span> </span><span>"Juan"</span><span>,</span><span> </span><span>"address"</span><span>:</span><span> </span><span>{</span><span> </span><span>"street"</span><span>:</span><span> </span><span>"Calle 123"</span><span>,</span><span> </span><span>"city"</span><span>:</span><span> </span><span>"Ciudad de México"</span><span>,</span><span> </span><span>"state"</span><span>:</span><span> </span><span>"CDMX"</span><span> </span><span>}</span><span> </span><span>}</span><span> </span><span>{</span><span> </span><span>"name"</span><span>:</span><span> </span><span>"Juan"</span><span>,</span><span> </span><span>"address"</span><span>:</span><span> </span><span>{</span><span> </span><span>"street"</span><span>:</span><span> </span><span>"Calle 123"</span><span>,</span><span> </span><span>"city"</span><span>:</span><span> </span><span>"Ciudad de México"</span><span>,</span><span> </span><span>"state"</span><span>:</span><span> </span><span>"CDMX"</span><span> </span><span>}</span><span> </span><span>}</span><span> </span>{ "name": "Juan", "address": { "street": "Calle 123", "city": "Ciudad de México", "state": "CDMX" } }
Enter fullscreen mode Exit fullscreen mode
Sin embargo, si queremos que las propiedades de Address
estén en el mismo nivel que las propiedades de Person
, podemos utilizar la anotación @JsonUnwrapped
en la propiedad Address
. La clase Person
se vería así:
<span>public</span> <span>class</span> <span>Person</span> <span>{</span><span>private</span> <span>String</span> <span>name</span><span>;</span><span>@JsonUnwrapped</span><span>private</span> <span>Address</span> <span>address</span><span>;</span><span>}</span><span>public</span> <span>class</span> <span>Address</span> <span>{</span><span>private</span> <span>String</span> <span>street</span><span>;</span><span>private</span> <span>String</span> <span>city</span><span>;</span><span>private</span> <span>String</span> <span>state</span><span>;</span><span>}</span><span>public</span> <span>class</span> <span>Person</span> <span>{</span> <span>private</span> <span>String</span> <span>name</span><span>;</span> <span>@JsonUnwrapped</span> <span>private</span> <span>Address</span> <span>address</span><span>;</span> <span>}</span> <span>public</span> <span>class</span> <span>Address</span> <span>{</span> <span>private</span> <span>String</span> <span>street</span><span>;</span> <span>private</span> <span>String</span> <span>city</span><span>;</span> <span>private</span> <span>String</span> <span>state</span><span>;</span> <span>}</span>public class Person { private String name; @JsonUnwrapped private Address address; } public class Address { private String street; private String city; private String state; }
Enter fullscreen mode Exit fullscreen mode
Al serializar un objeto Person
utilizando esta clase, la estructura resultante sería:
<span>{</span><span> </span><span>"name"</span><span>:</span><span> </span><span>"Juan"</span><span>,</span><span> </span><span>"street"</span><span>:</span><span> </span><span>"Calle 123"</span><span>,</span><span> </span><span>"city"</span><span>:</span><span> </span><span>"Ciudad de México"</span><span>,</span><span> </span><span>"state"</span><span>:</span><span> </span><span>"CDMX"</span><span> </span><span>}</span><span> </span><span>{</span><span> </span><span>"name"</span><span>:</span><span> </span><span>"Juan"</span><span>,</span><span> </span><span>"street"</span><span>:</span><span> </span><span>"Calle 123"</span><span>,</span><span> </span><span>"city"</span><span>:</span><span> </span><span>"Ciudad de México"</span><span>,</span><span> </span><span>"state"</span><span>:</span><span> </span><span>"CDMX"</span><span> </span><span>}</span><span> </span>{ "name": "Juan", "street": "Calle 123", "city": "Ciudad de México", "state": "CDMX" }
Enter fullscreen mode Exit fullscreen mode
Como podemos ver, las propiedades de Address
se desempaquetaron y se incluyeron en el mismo nivel que las propiedades de Person
.
En resumen, la anotación @JsonUnwrapped
es una herramienta que puede ser útil en situaciones en las que queremos una estructura JSON más simple o para facilitar la integración con otros sistemas que esperan una estructura JSON específica.
Spring Boot (3 Part Series)
1 Conversores personalizados para @RequestBody
2 Conversores personalizados para @RequestParam
3 Anotación @JsonUnwrapped
暂无评论内容