On Wed, Aug 16, 2023 at 7:35 AM Ken Hancock <hancoc...@gmail.com> wrote:
>
> Success. I used the setAnnotationIntrospector to essentially remove the 
> @JsonAnyGetter():
>
> ObjectMapper mapper = new ObjectMapper();
>
> mapper.setAnnotationIntrospector(new JacksonAnnotationIntrospector() {
>     @Override
>     public Boolean hasAnyGetter(final Annotated m) {
>         return false;
>     }
> });

That definitely works: an alternative could be to use mix-in
annotations to associate `@JsonAnyGetter(false)` "over" existing one.

What might also work -- although I haven't verified this -- is use of
`@JsonIgnoredProperties` along with any-getter/-setter annotation
(it works on regular `Map` valued properties but may or may not work
with any getter)

-+ Tatu +-

>
>
>
> On Wed, Aug 16, 2023 at 8:19 AM Ken Hancock <hancoc...@gmail.com> wrote:
>>
>> I think so, but that was my original question -- I couldn't figure out how 
>> to customize the master to drop that field.
>>
>> On Tuesday, August 15, 2023 at 9:15:49 PM UTC-4 Joo Hyuk Kim (Vince) wrote:
>>>
>>> There was similar issue in jackson-databind Github , but the issue is 
>>> per-class declaration usecase.
>>>
>>> If we can have a differently configured mapper,  how about....
>>>
>>> 1. Copy the global mapper via `mapper.copy()`
>>> 2. Add custom de/serializer to the new mapper from (1)
>>> 3. The custom de/serializer from (2) will handle de/serialization for 
>>> specific cases?
>>>
>>> ... this, might work?
>>> On Wednesday, August 16, 2023 at 3:59:26 AM UTC+9 Ken Hancock wrote:
>>>>
>>>> I can't remove the @JsonAnySetter and @JsonAnyGetter as
>>>>
>>>> (1) those are generated automatically from the schema
>>>> (2) in the nominal use case I want to preserve the additional properties
>>>>
>>>> It's only in one special case where I'm sending data to an external system 
>>>> that I need to strip them off, hence I'd like to be able to configure that 
>>>> at runtime via a differently configured mapper.
>>>>
>>>> On Tuesday, August 15, 2023 at 5:30:35 AM UTC-4 Joo Hyuk Kim (Vince) wrote:
>>>>>
>>>>> > if I drop on...
>>>>>
>>>>> Though I am not sure what you mean by "dropping on", but as far as I 
>>>>> understood....
>>>>>
>>>>> ```java
>>>>>
>>>>> SimpleObject simpleObject = new SimpleObject();
>>>>>
>>>>> simpleObject.setSingleField("onlyField");
>>>>>
>>>>> simpleObject.setAdditionalProperty("additional", "additional");
>>>>>
>>>>> simpleObject.setAdditionalProperty("remains", "remains");
>>>>>
>>>>> ```
>>>>>
>>>>> ...should serialize into `{"singleField":"onlyIfeld"}`.
>>>>>
>>>>>
>>>>> And JSON string `{"onlyField": "someValue", "additional": 
>>>>> "anotherValue"}` should deserialize into an instance of `SimpleObject` 
>>>>> class with "onlyField" as its singleField and empty map?
>>>>>
>>>>> Try simply removing `@JsonAnySetter` and `@JsonAnyGetter`.
>>>>>
>>>>>
>>>>> Hope it helps,
>>>>>
>>>>> thanks
>>>>>
>>>>> On Monday, August 14, 2023 at 11:59:36 PM UTC+9 Ken Hancock wrote:
>>>>>>
>>>>>>
>>>>>> Hi Vince,
>>>>>>
>>>>>> If I'm understanding the implementation of mapper.convertVaue(), I think 
>>>>>> it doesn't matter whether it's on serialization or deserialization since 
>>>>>> convertValue() does both.
>>>>>>
>>>>>> To illustrate, let's say I have a pojo with one field and the 
>>>>>> anySetter/anyGetter:
>>>>>>
>>>>>> @JsonProperty("onlyField")
>>>>>> private String onlyField;
>>>>>>
>>>>>> @JsonAnyGetter
>>>>>> public Map<String, Object> getAdditionalProperties() {
>>>>>>     return this.additionalProperties;
>>>>>> }
>>>>>>
>>>>>> @JsonAnySetter
>>>>>> public void setAdditionalProperty(String name, Object value) {
>>>>>>     this.additionalProperties.put(name, value);
>>>>>> }
>>>>>>
>>>>>> If I deserialize {"onlyField": "someValue", "additional": 
>>>>>> "anotherValue"}, I end up with a pojo with object.getOnlyField() == 
>>>>>> "someValue") and object.getAdditionalProperties().get("additional") == 
>>>>>> "anotherValue")
>>>>>>
>>>>>> Now when I call mapper.convertValue(object, MyPojo.class):
>>>>>> if I drop on serialization, I end up with a serialized object of 
>>>>>> {"onlyField": "someValue"}
>>>>>> if I drop on deserialize, I start with a serialized object of  
>>>>>> {"onlyField": "someValue", "additional": "anotherValue"} but end up with 
>>>>>> a pojo with an empty map in object.getAditionalProperties().
>>>>>>
>>>>>> If I can do it at either step, I'd love to know how, but either one will 
>>>>>> solve my current problem.
>>>>>>
>>>>>> Here's a gist with a sample, which currently fails: 
>>>>>> https://gist.github.com/hancockks/02509e5d06b0f1d95b1e3e6c4a23a9f1
>>>>>>
>>>>>> On Saturday, August 12, 2023 at 8:31:54 AM UTC-4 Joo Hyuk Kim (김주혁) 
>>>>>> wrote:
>>>>>>>
>>>>>>> Hello Ken,
>>>>>>>
>>>>>>> To make things clear, a few questions.
>>>>>>>
>>>>>>> Meaning of "to strip any additional properties before writing an 
>>>>>>> object". Are you looking to exclude `additionalProperties` only during 
>>>>>>> serialization, but include in deserialization?
>>>>>>> Is the primary intent to generate a JSON output that does not include 
>>>>>>> `additionalProperties`, or is there another objective?
>>>>>>> Could you also provide a simple, reproducible example using just 
>>>>>>> Jackson and Java?
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Joo Hyuk, Kim (Vince)
>>>>>>>
>>>>>>> On Saturday, August 12, 2023 at 1:31:13 AM UTC+9 Ken Hancock wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>> I have a pojo that serializes any additional properties into
>>>>>>>>
>>>>>>>> @JsonAnyGetter
>>>>>>>> public Map<String, Object> getAdditionalProperties() {
>>>>>>>>     return this.additionalProperties;
>>>>>>>> }
>>>>>>>>
>>>>>>>> @JsonAnySetter
>>>>>>>> public void setAdditionalProperty(String name, Object value) {
>>>>>>>>     this.additionalProperties.put(name, value);
>>>>>>>> }
>>>>>>>>
>>>>>>>> However, I have an odd use case where I want to be able to strip any 
>>>>>>>> additional properties before writing an object. I'm fairly sure with 
>>>>>>>> all of Jackson's configuration settings that I should be able to 
>>>>>>>> configure a mapper such that mapper.convertValue(myPojo, MyPojo.class) 
>>>>>>>> should be able to serialize and deserialize back again, dropping the 
>>>>>>>> additionalProperties when it serializes?   The pojo is deeply nested 
>>>>>>>> and auto-generated, so I'd prefer not to hard-code having to just 
>>>>>>>> clear additionalProperties at each sub-object.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>
>>>>>>>> Ken
>>
>> --
>> 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 jackson-user+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/jackson-user/de0ff137-4ffe-445c-b6f5-f345ecc5caecn%40googlegroups.com.
>
> --
> 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 jackson-user+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/jackson-user/CAGi%2BZD2_x%3D6sVuTcfp57CxHq2xj_3sfdym8qwbhCKcZmdQo6Mw%40mail.gmail.com.

-- 
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 jackson-user+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jackson-user/CAL4a10h00Nh3W--gCg8f2FkdtHJUqH3iRe4EczE4YU6AjEevUA%40mail.gmail.com.

Reply via email to