jackson-databind icon indicating copy to clipboard operation
jackson-databind copied to clipboard

Support serializing `ByteArrayOutputStream` as "simple" Binary value

Open cowtowncoder opened this issue 2 years ago • 0 comments

(note: follow-up to #3493)

Before Jackson 2.12, apparently it was possible to serialize ByteArrayOutputStream values as a POJO -- if (and only if) auto-detection of all visibility levels (including private) was enabled. If so, a POJO with buf and length fields were produced. With 2.13 the default visibility settings for JDK types were changed to only detect public accessors; this also prevents custom default visibility from being applied. As a result, ByteArrayOutputStream values are no longer serializable.

But it might make sense to make it serializable again. However, the representation as POJO does not make sense: if serialization is to be used, it should:

  1. Use public ByteArrayOutStream.toByteArray() to access content
  2. Serialize contents as a Binary value: for JSON backend this means Base64-encoded String; for other backends whatever their representation of Binary values is

I realize that this behavior is different from the earlier one so it is an open question if this should be deferred until Jackson 3.0.

cowtowncoder avatar Jun 20 '22 17:06 cowtowncoder