Comments (25)
Is there any plan to resolve this in Jackson(if it can be resolved)? Or is the official answer just to use @get:JsonProperty
from jackson-module-kotlin.
You really should change behavior or add example on Readme in Caveats because this thread is more than half year old and I just hit this problem.
from jackson-module-kotlin.
I am finding that when I use the annotated data class for both deserialization and serialization, that @get:JsonProperty("isSomething")
is not sufficient. I must also annotate the constructor param with @param:JsonProperty("isSomething")
, otherwise when I deserialize a JSON string into the data class, the field gets ignored.
from jackson-module-kotlin.
What I'm getting at is that having the presence or absence of is
affect annotations seems like a bug: clearly the annotation is present and usable since it works without is
, so it seems like that would mean this is a Jackson bug, not a Kotlin bytecode issue.
from jackson-module-kotlin.
@gregschlom thanks for your solution but do you use proguard? Because I do and I encounter a problem with this special annotation while I specified the -keepattributes *Annotation*
(which works for "classic annotations")
Thanks again
from jackson-module-kotlin.
@otomatik no, I do not use proguard.
from jackson-module-kotlin.
Hi, I have kind of similar issue. I have custom generic Optional
:
data class Optional<T> (
var value: T? = null
) {
@JsonCreator
constructor(): this(null)
}
and class where it used with Boolean
inside:
@JsonIgnoreProperties(ignoreUnknown = true)
data class ChangeEventModelUpdate (
var isAllDay: Optional<Boolean>? = null
) {
@JsonCreator
constructor(): this(null)
}
and after serialization ObjectMapper().writeValueAsString(ChangeEventModelUpdate(Optional(true)))
I have string with empty object in result.
from jackson-module-kotlin.
I'm looking at this to see if there is a way to resolve it. If not, will document workarounds.
from jackson-module-kotlin.
For reference, this class:
class Test(
@JsonProperty("is_lol")
val lol: String = "sdf",
@JsonProperty("is_bar")
val bar: Boolean = true,
@JsonProperty("is_bar2")
val isBar2: Boolean = true
) {
// class body
@JsonProperty("is_foo")
val foo: Boolean = true
@JsonProperty("is_foo2")
val isFoo2: Boolean = true
}
which has part of the values in the constructor (meaning the annotations might go on the parameter instead of the getter), and part of the values in the body (meaning the annotations might go on the field instead of the getter).
generates this bytecode (summarized):
public final class com/fasterxml/jackson/module/kotlin/test/Github52$Test {
// access flags 0x12
private final Z foo = true
@Lcom/fasterxml/jackson/annotation/JsonProperty;(value="is_foo")
// access flags 0x11
public final getFoo()Z
...
// access flags 0x12
private final Z isFoo2 = true
@Lcom/fasterxml/jackson/annotation/JsonProperty;(value="is_foo2")
// access flags 0x11
public final isFoo2()Z
...
// access flags 0x12
private final Ljava/lang/String; lol
@Lorg/jetbrains/annotations/NotNull;() // invisible
// access flags 0x11
public final getLol()Ljava/lang/String;
@Lorg/jetbrains/annotations/NotNull;() // invisible
...
// access flags 0x12
private final Z bar
// access flags 0x11
public final getBar()Z
...
// access flags 0x12
private final Z isBar2
// access flags 0x11
public final isBar2()Z
...
// access flags 0x1
public <init>(Ljava/lang/String;ZZ)V
@Lcom/fasterxml/jackson/annotation/JsonProperty;(value="is_lol") // parameter 0
@Lcom/fasterxml/jackson/annotation/JsonProperty;(value="is_bar") // parameter 1
@Lcom/fasterxml/jackson/annotation/JsonProperty;(value="is_bar2") // parameter 2
@Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 0
...
// access flags 0x1001
public synthetic <init>(Ljava/lang/String;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V
...
// access flags 0x1
public <init>()V
...
...
}
from jackson-module-kotlin.
produces:
{"is_lol":"sdf","is_bar":true,"bar2":true,"foo2":true,"is_foo":true,"is_foo2":true}
So the issue is that the constructor parameters are giving some fields their name is_lol
, is_bar
, and is_bar2
, but then some JsonProperties
fall onto the fields instead of the getters, making those fields rename to is_foo
and is_foo2
, so then the getters for these fields appear to be OTHER properties getFoo()
becoming foo
and isFoo2()
becoming foo2
, the other bar fields are ignored because they have no annotation, and their getters line up with the constructor parameters and therefore come out as the same properties.
This happens because Kotlin places the annotation on the first target in its priority list, and that is different for a constructor parameter than it is for a class member. So a annotation target must be applied to clarify where exactly you want it @get:JsonProperty
being that target.
So this needs to be added to the caveats to make it clear.
The only other solution would be for @cowtowncoder to let me replace JsonProperty in Java, with the same written in Kotlin, it would be compatible with the Java version, but would add the Kotlin metadata that allows the targetting of the getter to be higher in precedence than the field. The Java @Target
would be the same, but would include the kotlin specific targets as well that only Kotlin would see.
It could also be written in Java, but at compile time would need to add the Kotlin annotation (think that would work, doesn't need any Kotlin metadata, just need the Kotlin version of annotation targetting as well, see the Byte Code)...
Roughly something like:
enum class JsonPropertyAccess {
AUTO,
READ_ONLY,
WRITE_ONLY,
READ_WRITE
}
const val JSON_PROPERTY_USE_DEFAULT_NAME = ""
const val JSON_PROPERTY_INDEX_UNKNOWN = -1
@Target(
AnnotationTarget.ANNOTATION_CLASS,
AnnotationTarget.PROPERTY_GETTER,
AnnotationTarget.PROPERTY_SETTER,
AnnotationTarget.FIELD,
AnnotationTarget.FUNCTION,
AnnotationTarget.VALUE_PARAMETER
)
@Retention(AnnotationRetention.RUNTIME)
@JacksonAnnotation
annotation class JsonProperty(
val value: String = "",
val required: Boolean = false,
val index: Int = JSON_PROPERTY_INDEX_UNKNOWN,
val defaultValue: String = JSON_PROPERTY_USE_DEFAULT_NAME,
val access: JsonPropertyAccess = JsonPropertyAccess.AUTO
)
Which generates byte code compatible annotation, but that would act correctly for Kotlin:
// ================com/fasterxml/jackson/module/kotlin/JsonPropertyAccess.class =================
// class version 50.0 (50)
// access flags 0x4031
// signature Ljava/lang/Enum<Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess;>;
// declaration: com/fasterxml/jackson/module/kotlin/JsonPropertyAccess extends java.lang.Enum<com.fasterxml.jackson.module.kotlin.JsonPropertyAccess>
public final enum com/fasterxml/jackson/module/kotlin/JsonPropertyAccess extends java/lang/Enum {
// access flags 0x4019
public final static enum Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess; AUTO
// access flags 0x4019
public final static enum Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess; READ_ONLY
// access flags 0x4019
public final static enum Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess; WRITE_ONLY
// access flags 0x4019
public final static enum Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess; READ_WRITE
// access flags 0x8
static <clinit>()V
ICONST_4
ANEWARRAY com/fasterxml/jackson/module/kotlin/JsonPropertyAccess
DUP
DUP
ICONST_0
NEW com/fasterxml/jackson/module/kotlin/JsonPropertyAccess
DUP
LDC "AUTO"
ICONST_0
INVOKESPECIAL com/fasterxml/jackson/module/kotlin/JsonPropertyAccess.<init> (Ljava/lang/String;I)V
DUP
PUTSTATIC com/fasterxml/jackson/module/kotlin/JsonPropertyAccess.AUTO : Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess;
AASTORE
DUP
ICONST_1
NEW com/fasterxml/jackson/module/kotlin/JsonPropertyAccess
DUP
LDC "READ_ONLY"
ICONST_1
INVOKESPECIAL com/fasterxml/jackson/module/kotlin/JsonPropertyAccess.<init> (Ljava/lang/String;I)V
DUP
PUTSTATIC com/fasterxml/jackson/module/kotlin/JsonPropertyAccess.READ_ONLY : Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess;
AASTORE
DUP
ICONST_2
NEW com/fasterxml/jackson/module/kotlin/JsonPropertyAccess
DUP
LDC "WRITE_ONLY"
ICONST_2
INVOKESPECIAL com/fasterxml/jackson/module/kotlin/JsonPropertyAccess.<init> (Ljava/lang/String;I)V
DUP
PUTSTATIC com/fasterxml/jackson/module/kotlin/JsonPropertyAccess.WRITE_ONLY : Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess;
AASTORE
DUP
ICONST_3
NEW com/fasterxml/jackson/module/kotlin/JsonPropertyAccess
DUP
LDC "READ_WRITE"
ICONST_3
INVOKESPECIAL com/fasterxml/jackson/module/kotlin/JsonPropertyAccess.<init> (Ljava/lang/String;I)V
DUP
PUTSTATIC com/fasterxml/jackson/module/kotlin/JsonPropertyAccess.READ_WRITE : Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess;
AASTORE
PUTSTATIC com/fasterxml/jackson/module/kotlin/JsonPropertyAccess.$VALUES : [Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess;
RETURN
MAXSTACK = 8
MAXLOCALS = 0
// access flags 0x101A
private final static synthetic [Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess; $VALUES
// access flags 0x4
// signature ()V
// declaration: void <init>()
protected <init>(Ljava/lang/String;I)V
@Ljava/lang/Synthetic;() // parameter 0
@Ljava/lang/Synthetic;() // parameter 1
L0
LINENUMBER 6 L0
ALOAD 0
ALOAD 1
ILOAD 2
INVOKESPECIAL java/lang/Enum.<init> (Ljava/lang/String;I)V
RETURN
L1
LOCALVARIABLE this Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess; L0 L1 0
LOCALVARIABLE $enum_name_or_ordinal$0 Ljava/lang/String; L0 L1 1
LOCALVARIABLE $enum_name_or_ordinal$1 I L0 L1 2
MAXSTACK = 3
MAXLOCALS = 3
// access flags 0x9
public static values()[Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess;
GETSTATIC com/fasterxml/jackson/module/kotlin/JsonPropertyAccess.$VALUES : [Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess;
INVOKEVIRTUAL [Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess;.clone ()Ljava/lang/Object;
CHECKCAST [Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess;
ARETURN
MAXSTACK = 1
MAXLOCALS = 0
// access flags 0x9
public static valueOf(Ljava/lang/String;)Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess;
LDC Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess;.class
ALOAD 0
INVOKESTATIC java/lang/Enum.valueOf (Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
CHECKCAST com/fasterxml/jackson/module/kotlin/JsonPropertyAccess
ARETURN
MAXSTACK = 2
MAXLOCALS = 1
@Lkotlin/Metadata;(mv={1, 1, 9}, bv={1, 0, 2}, k=1, d1={"\u0000\u000c\n\u0002\u0018\u0002\n\u0002\u0010\u0010\n\u0002\u0008\u0006\u0008\u0086\u0001\u0018\u00002\u0008\u0012\u0004\u0012\u00020\u00000\u0001B\u0007\u0008\u0002\u00a2\u0006\u0002\u0010\u0002j\u0002\u0008\u0003j\u0002\u0008\u0004j\u0002\u0008\u0005j\u0002\u0008\u0006\u00a8\u0006\u0007"}, d2={"Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess;", "", "(Ljava/lang/String;I)V", "AUTO", "READ_ONLY", "WRITE_ONLY", "READ_WRITE", "production sources for module jackson-module-kotlin"})
// compiled from: KotlinAnnotation.kt
}
// ================com/fasterxml/jackson/module/kotlin/JsonProperty.class =================
// class version 50.0 (50)
// access flags 0x2601
public abstract @interface com/fasterxml/jackson/module/kotlin/JsonProperty implements java/lang/annotation/Annotation {
@Lkotlin/annotation/Target;(allowedTargets={Lkotlin/annotation/AnnotationTarget;.ANNOTATION_CLASS, Lkotlin/annotation/AnnotationTarget;.PROPERTY_GETTER, Lkotlin/annotation/AnnotationTarget;.PROPERTY_SETTER, Lkotlin/annotation/AnnotationTarget;.FIELD, Lkotlin/annotation/AnnotationTarget;.FUNCTION, Lkotlin/annotation/AnnotationTarget;.VALUE_PARAMETER})
@Lkotlin/annotation/Retention;(value=Lkotlin/annotation/AnnotationRetention;.RUNTIME)
@Lcom/fasterxml/jackson/annotation/JacksonAnnotation;()
@Ljava/lang/annotation/Retention;(value=Ljava/lang/annotation/RetentionPolicy;.RUNTIME)
@Ljava/lang/annotation/Target;(value={Ljava/lang/annotation/ElementType;.FIELD, Ljava/lang/annotation/ElementType;.METHOD, Ljava/lang/annotation/ElementType;.PARAMETER, Ljava/lang/annotation/ElementType;.ANNOTATION_TYPE})
// access flags 0x401
public abstract value()Ljava/lang/String;
default=""
// access flags 0x401
public abstract required()Z
default=false
// access flags 0x401
public abstract index()I
default=-1
// access flags 0x401
public abstract defaultValue()Ljava/lang/String;
default=""
// access flags 0x401
public abstract access()Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess;
default=Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess;.AUTO
@Lkotlin/Metadata;(mv={1, 1, 9}, bv={1, 0, 2}, k=1, d1={"\u0000$\n\u0002\u0018\u0002\n\u0002\u0010\u001b\n\u0000\n\u0002\u0010\u000e\n\u0000\n\u0002\u0010\u000b\n\u0000\n\u0002\u0010\u0008\n\u0002\u0008\u0002\n\u0002\u0018\u0002\n\u0000\u0008\u0087\u0002\u0018\u00002\u00020\u0001B2\u0012\u0008\u0008\u0002\u0010\u0002\u001a\u00020\u0003\u0012\u0008\u0008\u0002\u0010\u0004\u001a\u00020\u0005\u0012\u0008\u0008\u0002\u0010\u0006\u001a\u00020\u0007\u0012\u0008\u0008\u0002\u0010\u0008\u001a\u00020\u0003\u0012\u0008\u0008\u0002\u0010\u0009\u001a\u00020\nR\u0009\u0010\u0009\u001a\u00020\n\u00a2\u0006\u0000R\u0009\u0010\u0008\u001a\u00020\u0003\u00a2\u0006\u0000R\u0009\u0010\u0006\u001a\u00020\u0007\u00a2\u0006\u0000R\u0009\u0010\u0004\u001a\u00020\u0005\u00a2\u0006\u0000R\u0009\u0010\u0002\u001a\u00020\u0003\u00a2\u0006\u0000\u00a8\u0006\u000b"}, d2={"Lcom/fasterxml/jackson/module/kotlin/JsonProperty;", "", "value", "", "required", "", "index", "", "defaultValue", "access", "Lcom/fasterxml/jackson/module/kotlin/JsonPropertyAccess;", "production sources for module jackson-module-kotlin"})
// compiled from: KotlinAnnotation.kt
}
// ================com/fasterxml/jackson/module/kotlin/KotlinAnnotationKt.class =================
// class version 50.0 (50)
// access flags 0x31
public final class com/fasterxml/jackson/module/kotlin/KotlinAnnotationKt {
// access flags 0x19
public final static Ljava/lang/String; JSON_PROPERTY_USE_DEFAULT_NAME = ""
@Lorg/jetbrains/annotations/NotNull;() // invisible
// access flags 0x19
public final static I JSON_PROPERTY_INDEX_UNKNOWN = -1
@Lkotlin/Metadata;(mv={1, 1, 9}, bv={1, 0, 2}, k=2, d1={"\u0000\u000e\n\u0000\n\u0002\u0010\u0008\n\u0000\n\u0002\u0010\u000e\n\u0000\"\u000e\u0010\u0000\u001a\u00020\u0001X\u0086T\u00a2\u0006\u0002\n\u0000\"\u000e\u0010\u0002\u001a\u00020\u0003X\u0086T\u00a2\u0006\u0002\n\u0000\u00a8\u0006\u0004"}, d2={"JSON_PROPERTY_INDEX_UNKNOWN", "", "JSON_PROPERTY_USE_DEFAULT_NAME", "", "production sources for module jackson-module-kotlin"})
// compiled from: KotlinAnnotation.kt
}
// ================META-INF/production sources for module jackson-module-kotlin.kotlin_module =================
���������������
9
#com.fasterxml.jackson.module.kotlin��KotlinAnnotationKt
from jackson-module-kotlin.
so @cowtowncoder if you can compile annotations against Kotlin runtime, but as a compile-only dependency, you could add kotlin.annotation.Target
annotation to JsonProperty
with these values:
@Target(
AnnotationTarget.ANNOTATION_CLASS,
AnnotationTarget.PROPERTY_GETTER,
AnnotationTarget.PROPERTY_SETTER,
AnnotationTarget.FIELD,
AnnotationTarget.FUNCTION,
AnnotationTarget.VALUE_PARAMETER
)
and then annotations are not required to be present at runtime so SHOULD (yes?) not break anything (I think at one point in Scala it did, but not presently?).
I could do a test and check all annotations in jackson annotations library and set the correct list for each, and do tests against them all.
The alternative is to allow some way to plug in Kotlin specific annotations for everything that have these, and maybe that is already possible with Annotation Inspector, I haven't checked.
Let me know the best way, and I'll check it out.
from jackson-module-kotlin.
I'd have to read this over a few times to make sure, but to be honest, I am not sure this would fly, and although possibly working, sounds quite fragile approach to me.
There are couple of practical problems (ideally jackson-annotations
patch versions are identical; and with 3.x, there will not be patch versions), and so 2.9.0 having been done, I'd prefer no change.
I also do not like the idea of Kotlin dependency even for build time; partly since I fear some platform (or tool) might still barf on missing annotation.
So... not saying it's not going to happen, but feeling pessimistic at this point.
from jackson-module-kotlin.
@cowtowncoder Is there a way to plugin custom annotations yet still provide the same information? So instead of reading these annotations directly, call something that collects them and returns the data they would be holding, that way you can use custom annotations as long as the module can understand them.
Alternatively, but fragile is an alternative build from Kotlin of the same using same packages and have it be drop-in replacement, but one dependency random ordering or dupe classes (Java 9) would break it.
from jackson-module-kotlin.
I can do this already with: AnnotationInspector.findPropertyAliases
yes? any annotation on a parameter will cause that to be called and I can have my own annotations that are more Kotlin friendly.
from jackson-module-kotlin.
nope, this isn't called for all cases. close, but no.
from jackson-module-kotlin.
findPropertyAliases()
should be called for all accessors, but it does not participate in reconciliation process same way, so perhaps this is the difference you see. That is, names are first resolved, reconciled, so that each accessor is only associated with one logical name. That name may then have aliases. There is further potential problem that I am not sure alias definitions from possibly distinct accessors are merged -- almost certainly they are not, since all (other) annotations are winner-takes-all, choose one with higher priority.
from jackson-module-kotlin.
One other possibility that might work but be somewhat cumbersome could be to post-process jackson-annotations
from another repo, add annotations, republish as jackson-kotlin-annotations
(or whatever name)? That has its downsides wrt Maven dependencies but would allow attaching necessary additions. Not sure how post-processing itself would work but seems like there should be tools for such things. Just an idea, not sure how good one. :)
from jackson-module-kotlin.
Hey I hope my issue is related to this topic
I'm using Kotlin @get:JsonProperty("NAME")
- the only way that my field is send in RequestBody
NAME instead of property's name.
After turining on ProGuard it makes something strange thing related with object mapper( other classes those properties haven't @get:
annotation works fine).
String jackson = '2.9.1'
implementation "com.fasterxml.jackson.core:jackson-core:${jackson}"
implementation "com.fasterxml.jackson.core:jackson-annotations:${jackson}"
implementation "com.fasterxml.jackson.core:jackson-databind:${jackson}"
data class FormDocTankPermission (
@get:JsonProperty("fuelCardId")
public val fuelCardId: Long,
@get:JsonProperty("fuelType")
public val fuelTypes: List<EnumFuelType>?,
@get:JsonProperty("regNo")
public val registrationNo: String,
@get:JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
@get:JsonProperty("validityDate")
public val validityDate: Date)
I would like to showyou stacktrace:
java.lang.RuntimeException: Unable to convert FormDocTankPermission(fuelCardId=3, fuelTypes=[], registrationNo=C, validityDate=Thu Feb 22 00:00:00 GMT+00:00 2018) to RequestBody
[...]
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class pl.intenso.carefleet.e.j and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
from jackson-module-kotlin.
I'm not sure if I'm hitting this issue or possibly a different one?
When annotating a data class's boolean parameter with @JsonProperty
to set the name when serialized, it works correctly if the boolean doesn't start with is
. If it does start with is
, then the @JsonProperty
has no effect, and the serialized name is the property name with is
removed.
Repro: https://bitbucket.org/marshallpierce/jackson-boolean-prop-name-repro/src/master/
from jackson-module-kotlin.
@marshallpierce yep that is the issue. Try annotating it like I have in my comment, and you'll see it properly serialize/deserialize.
The catch is you need to tell Kotlin where to put the @JsonProperty annotation. @get:
tells Kotlin to put it on the getter, and @param:
tells it to put it on the constuctor parameter.
With the annotation in both places, serialization and deserialization works correctly.
from jackson-module-kotlin.
But why does it change based on whether or not there is an is
prefix?
from jackson-module-kotlin.
It's just how Jackson works. By default, if Jackson sees a property that starts with get or is, it strips that off when serializing. And it expects to deserialize the stripped field name.
There's probably a way to configure the ObjectMapper to not do this, but I don't know how.
from jackson-module-kotlin.
I am finding that when I use the annotated data class for both deserialization and serialization, that
@get:JsonProperty("isSomething")
is not sufficient. I must also annotate the constructor param with@param:JsonProperty("isSomething")
, otherwise when I deserialize a JSON string into the data class, the field gets ignored.
It works but I have problem with openapi-generator-maven-plugin that generates only @JsonProperty("isSomething") annotation
from jackson-module-kotlin.
@MaksimRT can you report an issue to that generator code to put the use-site target on it? It appears at this moment to be impossible to defeat Kotlin's choice of how it places annotations on the code it generates for properties. There is a big gap in what it does, from what we need. And no work-around above the programming adding those use-site targets.
from jackson-module-kotlin.
It will be fixed in 2.10.1 version by #256
from jackson-module-kotlin.
Related Issues (20)
- Polymorphic sealed class missing type information
- mapper.updateValue allows to set fields to null which are not nullable HOT 1
- Incosistent behaviour with a single field
- Field proliferation bug when using ObjectMapper in Kotlin HOT 1
- @JsonProperty ignored when serialising Kotlin @JvmRecord in 2.16.X HOT 3
- Excessive memory usage when using KotlinModule with Kotlin data class HOT 2
- `NoSuchMethodError` for `com.fasterxml.jackson.module.kotlin.jacksonObjectMapper` after upgrading to 2.17.0 HOT 12
- Cannot use value class as map key in 2.17 HOT 8
- Can't compute ClassId for primitive type: int HOT 5
- Create 2.18 branch HOT 1
- How to disable the feature who rename a primitive boolean "isXXX" to "XXX" HOT 1
- Property enabledSingletonSupport - deprecated but with wrong template HOT 2
- Field with value class typ ignoring JsonProperty binding HOT 1
- Custom deserializer of inlined value class (with delegate) HOT 3
- 2.18 build on JDK 8 fails CI HOT 2
- Kotlin Module interferes with Java record deserialization HOT 4
- Missing classes error using AGP 8 R8 shrinker HOT 1
- Boolean property setter is skipped if name isX prefixed HOT 2
- CSV deserialization fails for targets with value class field when column reordering is enabled HOT 4
- Now failing test in 2.18 after Property Introspection Rewrite HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jackson-module-kotlin.