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.
