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.