Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1d9c0ca

Browse files
committed
removed JacksonAnnotationsInside from com.arangodb.serde.jackson.Key annotation
1 parent 7ad7d5f commit 1d9c0ca

File tree

4 files changed

+80
-7
lines changed

4 files changed

+80
-7
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.arangodb.serde;
2+
3+
import com.arangodb.serde.jackson.Id;
4+
import com.arangodb.serde.jackson.Key;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
6+
import com.fasterxml.jackson.databind.node.ObjectNode;
7+
import org.junit.jupiter.api.Test;
8+
9+
import static org.assertj.core.api.Assertions.assertThat;
10+
11+
class JacksonInterferenceTest {
12+
13+
private final ObjectMapper mapper = new ObjectMapper();
14+
15+
static class Foo {
16+
@Id
17+
public String myId;
18+
19+
@Key
20+
public String myKey;
21+
22+
Foo(String id, String key) {
23+
myId = id;
24+
myKey = key;
25+
}
26+
}
27+
28+
@Test
29+
void serialize() {
30+
Foo foo = new Foo("foo", "bar");
31+
ObjectNode node = mapper.convertValue(foo, ObjectNode.class);
32+
// assertThat(node.get("myId").textValue()).isEqualTo("foo");
33+
assertThat(node.get("myKey").textValue()).isEqualTo("bar");
34+
}
35+
}
Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package com.arangodb.serde.jackson;
22

3-
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
4-
import com.fasterxml.jackson.annotation.JsonInclude;
5-
import com.fasterxml.jackson.annotation.JsonProperty;
6-
73
import java.lang.annotation.ElementType;
84
import java.lang.annotation.Retention;
95
import java.lang.annotation.RetentionPolicy;
@@ -14,8 +10,5 @@
1410
*/
1511
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
1612
@Retention(RetentionPolicy.RUNTIME)
17-
@JacksonAnnotationsInside
18-
@JsonProperty("_key")
19-
@JsonInclude(JsonInclude.Include.NON_NULL)
2013
public @interface Key {
2114
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.arangodb.serde.jackson.internal;
2+
3+
import com.arangodb.serde.jackson.Key;
4+
import com.fasterxml.jackson.annotation.JsonInclude;
5+
import com.fasterxml.jackson.databind.PropertyName;
6+
import com.fasterxml.jackson.databind.introspect.Annotated;
7+
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
8+
9+
class ArangoSerdeAnnotationIntrospector extends JacksonAnnotationIntrospector {
10+
private static final JsonInclude JSON_INCLUDE_NON_NULL = JsonIncludeNonNull.class.getAnnotation(JsonInclude.class);
11+
12+
@JsonInclude(JsonInclude.Include.NON_NULL)
13+
private static class JsonIncludeNonNull {
14+
}
15+
16+
@Override
17+
public PropertyName findNameForSerialization(Annotated a) {
18+
Key kann = _findAnnotation(a, Key.class);
19+
if (kann != null) {
20+
return PropertyName.construct("_key");
21+
}
22+
return super.findNameForSerialization(a);
23+
}
24+
25+
@Override
26+
public PropertyName findNameForDeserialization(Annotated a) {
27+
Key kann = _findAnnotation(a, Key.class);
28+
if (kann != null) {
29+
return PropertyName.construct("_key");
30+
} else {
31+
return super.findNameForDeserialization(a);
32+
}
33+
}
34+
35+
@Override
36+
public JsonInclude.Value findPropertyInclusion(Annotated a) {
37+
Key kann = _findAnnotation(a, Key.class);
38+
if (kann != null) {
39+
return new JsonInclude.Value(JSON_INCLUDE_NON_NULL);
40+
} else {
41+
return super.findPropertyInclusion(a);
42+
}
43+
}
44+
}

‎jackson-serde-json/src/main/java/com/arangodb/serde/jackson/internal/JacksonSerdeImpl.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public final class JacksonSerdeImpl implements JacksonSerde {
1818
public JacksonSerdeImpl(final ObjectMapper mapper) {
1919
this.mapper = mapper;
2020
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
21+
mapper.setAnnotationIntrospector(new ArangoSerdeAnnotationIntrospector());
2122
}
2223

2324
@Override

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /