Anotación @JsonUnwrapped

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

原文链接:Anotación @JsonUnwrapped

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
better late than never.
只要开始,虽晚不迟
评论 抢沙发

请登录后发表评论

    暂无评论内容