On Tue, Sep 11, 2018 at 12:56 AM Slawek Mazur <[email protected]> wrote:
>
>
>
> W dniu poniedziałek, 10 września 2018 23:36:43 UTC+2 użytkownik Tatu 
> Saloranta napisał:
>>
>> 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 +-
>
>
>
> Yes! That's it. That did the job. It's nice coincidence that for Value 
> Objects Jackson has @JsonValue. Thank you.

:-D

Glad it works!

-+ 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