On Mon, Sep 10, 2018 at 8:13 AM Slawek Mazur <[email protected]> wrote:
>
> Here's the scenario:
>
> public class UnwrappedWithPropertyName {
>
>     public static void main(String[] args) throws JsonProcessingException {
>
>         final Address address = new Address(new Postcode("45678"));
>
>         final ObjectMapper mapper = new ObjectMapper();
>
>         System.out.println(mapper.writeValueAsString(address));
>     }
>
>
>     static class Address {
>
>         @JsonUnwrapped
>         @JsonProperty("postcode")
>         private final Postcode postcode;
>
>         Address(Postcode postcode) {
>             this.postcode = postcode;
>         }
>
>         public Postcode getPostcode() {
>             return postcode;
>         }
>     }
>
>     static class Postcode {
>
>         private final String value;
>
>         Postcode(String value) {
>             this.value = value;
>         }
>
>         public String getValue() {
>             return value;
>         }
>     }
> }
>
> That results in: {"value":"45678"} what I would expect is to see it as 
> {"postcode":"45678"}

`@JsonUnwrapped` "peels off" surrounding property, and then all
properties within `Postcode` are
serialized with settings they have. So `@JsonProperty` is ignored, and
that is as designed from
Jackson perspective.

But to achieve result you want, you would be better off using
`@JsonValue` on `Postcode`:

 static class Postcode {
         private final String value;

         // optional: to deserialize from String value
         @JsonCreator(mode = JsonCreator.Mode.DELEGATING)
         Postcode(String value) {
             this.value = value;
         }

         @JsonValue
         public String getValue() {
             return value;
         }
}

in which `Postcode` is serialized as String (and deserialized from
one); you can then still rename
(or not) property that points to it as you wish.

I hope this helps,

-+ Tatu +-

-- 
You received this message because you are subscribed to the Google Groups 
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to