In all fairness, I don't think the situation has changed at all regarding this, so the info and the question is still fresh :)
On Monday, November 1, 2021 at 6:00:12 PM UTC+1 [email protected] wrote: > On Sun, Oct 31, 2021 at 9:56 AM 遗迹 <[email protected]> wrote: > >> Are there any solution for this? In my case, I use it for OAS >> discriminator annotation. It looks like: > > > That thread is from 2017. Please start a new one with your question... > > -+ Tatu +- > > >> >> ```kotlin >> class Pet(val pet: Discriminator("petType") OneOf2<Dog, Cat>) >> ``` >> >> Without TYPE_USE annotation support, I can't get the discriminator >> information. >> Or are there any better choice to storage the information? >> >> Thank you. >> 在2017年12月29日星期五 UTC+8 上午5:08:49<Tatu Saloranta> 写道: >> >>> On Thu, Dec 28, 2017 at 2:16 AM, Bojan Tomic <[email protected]> wrote: >>> > Yes, TYPE_USE annotations and AnnotatedType were added in Java 8. >>> > As you noted, processing these can get quite hairy, but at least some >>> > support in Jackson would be very welcome. >>> > I am intimately familiar with the complexities involved, as I am the >>> > developer behind GeAnTyRef, a fork of GeTyRef (a library similar to >>> > ClassMate), that deeply supports working with AnnotatedTypes. >>> >>> Ah. Yes, your help here is appreciated and we could use your expertise. >>> Especially since you have an actual use case -- it's much easier to >>> add support for existing >>> use case, as opposed to expected or potential one. >>> >>> > I'm of the opinion Jackson would greatly gain in versatility if this >>> style >>> > of annotations was supported (as it makes it possible to convey >>> > (de)serialization hints on a very granular level). >>> > As I've mentioned, I'd be happy to contribute in order to get this >>> feature >>> > faster, if you'd be interested. >>> >>> Yes, I think that would make sense. >>> >>> As I said, `master` branch would be the the way to go at this point. >>> Code has been refactored quite a bit >>> since 2.9 in some places, but not so much wrt functionality for this, >>> I think. But code for 3.0 requires Java 8, >>> and 2 out of 3 modules (parameter names, Optional and other new types) >>> are part of `jackson-databind` now. >>> >>> -+ Tatu +- >>> >>> >>> > >>> > >>> > >>> > On Thursday, December 28, 2017 at 6:42:28 AM UTC+1, Tatu Saloranta >>> wrote: >>> >> >>> >> On Wed, Dec 27, 2017 at 9:33 AM, Bojan Tomic <[email protected]> >>> wrote: >>> >> > Just for the sake of experimentation, I've cobbled together the >>> >> > following >>> >> > wrapper class: >>> >> > >>> >> > class AnnotatedJavaType extends JavaType implements >>> AnnotatedElement { >>> >> > >>> >> > private final JavaType base; >>> >> > private final Annotation[] annotations; >>> >> > >>> >> > AnnotatedJavaType(JavaType base, Annotation[] annotations) { ... } >>> >> > >>> >> > //all methods simply delegate to this.base >>> >> > } >>> >> > >>> >> > >>> >> > >>> >> > And the corresponding TypeFactory wrapper: >>> >> > >>> >> > class AnnotatedTypeFactory { >>> >> > >>> >> > JavaType construct(AnnotatedType type, TypeFactory typeFactory) { >>> >> > if (type instanceof AnnotatedParameterizedType) { >>> >> > JavaType[] args = Arrays.stream(((AnnotatedParameterizedType) >>> >> > type).getAnnotatedActualTypeArguments()) >>> >> > .map(arg -> fromJavaType(arg, typeFactory)) >>> >> > .toArray(JavaType[]::new); >>> >> > >>> >> > TypeBindings bindings = >>> >> > TypeBindings.create(ClassUtils.getRawType(type.getType()), args); >>> >> > >>> >> > return new >>> >> > AnnotatedJavaType(typeFactory.constructType(type.getType(), >>> >> > bindings), type.getAnnotations()); >>> >> > } >>> >> > >>> >> > //handle wildcards, arrays, variables in the similar fashion >>> >> > >>> >> > return new >>> >> > AnnotatedJavaType(typeFactory.constructType(type.getType()), >>> >> > type.getAnnotations()); >>> >> > } >>> >> > } >>> >> > >>> >> > Amusingly enough, it works! I'd never keep it in my code base, but >>> it >>> >> > was an >>> >> > interesting experiment. >>> >> > >>> >> > If the functionality I'm after is impossible (and I really hope it >>> is >>> >> > not), >>> >> > would you be open to a contribution? I'd of course need some >>> >> > consultation/guidance on the approach, but would be happy to >>> develop it. >>> >> >>> >> As per my other note, this would need to be in Jackson 3.0 I think, >>> >> due to multiple reasons. >>> >> >>> >> I am bit hesitant to say much more since I really fear all complexity >>> >> that would come from trying >>> >> to create parallel annotation processing system. I can see some >>> >> benefits from type annotations, >>> >> but it wouldn't come for free, if we are talking about whole >>> >> AnnotationIntrospector style system. >>> >> >>> >> However: if the idea would be to do something simpler -- I don't >>> >> really see need for full AnnotationIntrospector >>> >> in this case, to be honest -- for example, simply keep track of >>> >> annotations for type, offer access... well, >>> >> that seems quite doable and useful. If so, `JavaType` could just have >>> >> `findAnnotation(Class<?> type)` method >>> >> or something? >>> >> >>> >> -+ Tatu +- >>> >> >>> >> >>> >> >>> >> > >>> >> > >>> >> > >>> >> > >>> >> > On Wednesday, December 27, 2017 at 11:34:37 AM UTC+1, Bojan Tomic >>> wrote: >>> >> >> >>> >> >> I have a rather exotic use-case that I have to support. Types >>> annotated >>> >> >> with @Id need custom deserialization logic, e.g. the value should >>> be >>> >> >> Base64 >>> >> >> decoded before deserializing it (not the only case). >>> >> >> >>> >> >> This means a type such as List<@Id Key> will be represented as a >>> list >>> >> >> of >>> >> >> Base64 Strings that I deserialize using my custom logic. >>> >> >> >>> >> >> I originally have an AnnotatedType that I convert to JavaType >>> using >>> >> >> TypeFactory.constructType(annotatedType.getType()) prior to >>> >> >> deserialization, >>> >> >> which of course looses all the annotations. >>> >> >> Later, in my custom Deserializers instance, in its various >>> >> >> findXXXDeserializer methods, I have no way to find the correct >>> >> >> deserializer >>> >> >> as the annotations needed for the decision are gone... >>> >> >> >>> >> >> I was hoping the JDK8 module would have it's own TypeFactory-like >>> >> >> mechanism to construct JavaType subclasses that preserve the >>> >> >> annotations >>> >> >> from AnnotatedTypes (e.g. >>> >> >> AnnotatedTypeFactory.constructType(annotatedType)), but it doesn't >>> seem >>> >> >> to >>> >> >> be the case. >>> >> >> >>> >> >> Is there any way at all to implement what I'm after? >>> >> > >>> >> > -- >>> >> > 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. >>> > >>> > -- >>> > 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. >>> >> -- >> 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 view this discussion on the web visit >> https://groups.google.com/d/msgid/jackson-user/e5f815f4-fac5-495a-9201-ca4f2a97acf0n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/jackson-user/e5f815f4-fac5-495a-9201-ca4f2a97acf0n%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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jackson-user/90cca472-18e0-400b-b402-269413237120n%40googlegroups.com.
