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; } }); 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 >> <https://github.com/FasterXML/jackson-databind/issues/1376> 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 > <https://groups.google.com/d/msgid/jackson-user/de0ff137-4ffe-445c-b6f5-f345ecc5caecn%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- 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.