On Fri, May 4, 2018 at 3:32 AM, Burak Emre Kabakcı <[email protected]> wrote:
> Thanks Tatu, @JsonTypeIdResolver comes to the rescue. I think an optional
> boolean property called `caseInsensitive` in @JsonSubTypes.Type would be
> really useful.

Ok good.

Could you please a feature request issue for `jackson-databind`, for
additional property?
It does seem useful, and I don't want this to be forgotten even if it
wasn't implemented
right away.

-+ Tatu +-

>
> On Thursday, May 3, 2018 at 7:52:56 PM UTC+3, Tatu Saloranta wrote:
>>
>> On Thu, May 3, 2018 at 4:20 AM, Burak Emre Kabakcı <[email protected]> wrote:
>> > I have the following class:
>> >
>> > class SimpleFilterItem(@JsonProperty("type") type: String,
>> >                        @JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
>> > property =
>> > "type", include = JsonTypeInfo.As.EXTERNAL_PROPERTY)
>> >                        @JsonSubTypes(value = [
>> >                            JsonSubTypes.Type(value =
>> > StringOperator::class,
>> > name = "STRING"),
>> >                            JsonSubTypes.Type(value =
>> > NumericOperator::class,
>> > name = "LONG"),
>> >                            JsonSubTypes.Type(value =
>> > NumericOperator::class,
>> > name = "DECIMAL"),
>> >                            JsonSubTypes.Type(value =
>> > NumericOperator::class,
>> > name = "INTEGER"),
>> >                            JsonSubTypes.Type(value =
>> > NumericOperator::class,
>> > name = "DOUBLE"),
>> >                            JsonSubTypes.Type(value =
>> > DateOperator::class,
>> > name = "DATE"),
>> >                            JsonSubTypes.Type(value =
>> > BooleanOperator::class,
>> > name = "BOOLEAN")
>> >                        ])
>> >                        val operator: Operator)
>> >
>> >
>> >
>> > However JsonSubTypes doesn't seem to support case-insensitive values so
>> > the
>> > value `string` fails. I also have the following enum:
>> >
>> > enum class FieldType(val operatorClass : Class<*>) {
>> >         STRING(StringOperator::class), INTEGER(NumericOperator::class),
>> > DECIMAL(NumericOperator::class), DOUBLE(NumericOperator::class),
>> > LONG(NumericOperator::class)
>> >
>> > }
>> >
>> >
>> > What I want to do to is to map the FieldType with the values instead of
>> > writing the STRING, LONG etc. by hand. I can also implement @JsonCreator
>> > to
>> > FieldType and solve the case insensitivity problem there. The main
>> > benefit
>> > of this approach is that I won't be duplicating the code.
>>
>> At this point you would probably need to implement custom
>> `TypeIdResolver`, which may be
>> registered using `@JsonTypeIdResolver` annotation.
>>
>> In theory we could add a feature to either use default/type-specific
>> case-insensitivity flag to apply to
>> type ids too (if this can be determined from base type); or, if not,
>> additional property for `@JsonTypeInfo`
>> to indicate that ids are to be handled in case insensitive manner.
>> This can not be made default for couple of reasons; there are
>> performance implications, but more importantly
>> some users really dislike idea of coercing values -- there are endless
>> disagreements it seems between developers
>> who want things to "just work" (do whatever you can to mangle things
>> to click) and those who want to ensure that
>> strictest validation of exact matches should always be done (never
>> accept anything even slightly askew).
>> Either way, support case-insensitive type ids is unlikely to be added
>> any time soon: it could go in 3.0 if commonly
>> requested, but that'll take time (end of 2018 or later).
>>
>> As to enum types: this does not and can not with Java (or JVM)
>> annotations since although specific Enum
>> type may be used as annotation property value, there is no way to
>> specify something like "value of any Enum type".
>> So name unfortunately must be `String` and there is no way around that.
>>
>> -+ Tatu +-
>
> --
> 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.

Reply via email to