Skip to content

Commit bec4194

Browse files
committed
fix for BigInteger and UUID
1 parent d99775e commit bec4194

File tree

5 files changed

+70
-17
lines changed

5 files changed

+70
-17
lines changed

jsonb/src/main/java/io/avaje/jsonb/JsonWriter.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.io.Closeable;
2121
import java.io.Flushable;
2222
import java.math.BigDecimal;
23+
import java.math.BigInteger;
2324

2425
/**
2526
* Writes json content.
@@ -148,24 +149,24 @@ public interface JsonWriter extends Closeable, Flushable {
148149
*/
149150
void value(BigDecimal value);
150151

152+
/**
153+
* Write a BigInteger value.
154+
*/
155+
void value(BigInteger value);
156+
151157
/**
152158
* Write a value that could be any value.
153159
*/
154160
void jsonValue(Object value);
155161

156162
/**
157-
* Write raw encoded json value.
163+
* Flush the writer.
158164
*/
159-
void rawValue(String value);
165+
void flush();
160166

161167
/**
162168
* Close the writer.
163169
*/
164170
void close();
165171

166-
/**
167-
* Flush the writer.
168-
*/
169-
void flush();
170-
171172
}

jsonb/src/main/java/io/avaje/jsonb/core/MathAdapters.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import io.avaje.jsonb.JsonWriter;
66
import io.avaje.jsonb.Jsonb;
77

8-
import java.io.IOException;
98
import java.lang.reflect.Type;
109
import java.math.BigDecimal;
1110
import java.math.BigInteger;
@@ -35,7 +34,7 @@ public BigDecimal fromJson(JsonReader reader) {
3534

3635
@Override
3736
public void toJson(JsonWriter writer, BigDecimal value) {
38-
writer.rawValue("\"" + value.toString() + "\"");
37+
writer.value(value.toString());
3938
}
4039

4140
@Override
@@ -86,7 +85,7 @@ public BigInteger fromJson(JsonReader reader) {
8685

8786
@Override
8887
public void toJson(JsonWriter writer, BigInteger value) {
89-
writer.rawValue(value.toString());
88+
writer.value(value);
9089
}
9190

9291
@Override

jsonb/src/main/java/io/avaje/jsonb/jackson/JacksonWriter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import java.io.IOException;
99
import java.math.BigDecimal;
10+
import java.math.BigInteger;
1011
import java.util.Collection;
1112
import java.util.List;
1213
import java.util.Map;
@@ -310,13 +311,13 @@ public void value(BigDecimal value) {
310311
}
311312

312313
@Override
313-
public void rawValue(String value) {
314+
public void value(BigInteger value) {
314315
if (value == null) {
315316
nullValue();
316317
} else {
317318
try {
318319
writeDeferredName();
319-
generator.writeRaw(value);
320+
generator.writeNumber(value);
320321
} catch (IOException e) {
321322
throw new JsonIoException(e);
322323
}

jsonb/src/main/java/io/avaje/jsonb/spi/DelegateJsonWriter.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.avaje.jsonb.JsonWriter;
44

55
import java.math.BigDecimal;
6+
import java.math.BigInteger;
67

78
/**
89
* Provides a delegating JsonWriter.
@@ -85,11 +86,6 @@ public void nullValue() {
8586
delegate.nullValue();
8687
}
8788

88-
@Override
89-
public void rawValue(String value) {
90-
delegate.rawValue(value);
91-
}
92-
9389
@Override
9490
public final void value(String value) {
9591
delegate.value(value);
@@ -140,6 +136,11 @@ public void value(BigDecimal value) {
140136
delegate.value(value);
141137
}
142138

139+
@Override
140+
public void value(BigInteger value) {
141+
delegate.value(value);
142+
}
143+
143144
@Override
144145
public void jsonValue(Object value) {
145146
delegate.jsonValue(value);
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package io.avaje.jsonb.core;
2+
3+
import io.avaje.jsonb.JsonType;
4+
import io.avaje.jsonb.Jsonb;
5+
import io.avaje.jsonb.Types;
6+
import org.junit.jupiter.api.Test;
7+
8+
import java.util.LinkedHashMap;
9+
import java.util.Map;
10+
import java.util.UUID;
11+
12+
import static org.assertj.core.api.Assertions.assertThat;
13+
14+
class UUIDTest {
15+
16+
Jsonb jsonb = Jsonb.newBuilder().build();
17+
18+
@Test
19+
void toJson_fromJson() {
20+
21+
UUID val = UUID.randomUUID();
22+
JsonType<UUID> type = jsonb.type(UUID.class);
23+
String asJson = type.toJson(val);
24+
assertThat(asJson).isEqualTo("\"" + val + "\"");
25+
26+
UUID fromJson = type.list().fromJson("[\"" + val + "\"]").get(0);
27+
assertThat(fromJson).isEqualTo(val);
28+
}
29+
30+
@Test
31+
void asMap_toFromJson() {
32+
33+
UUID v0 = UUID.randomUUID();
34+
UUID v1 = UUID.randomUUID();
35+
Map<String, UUID> map = new LinkedHashMap<>();
36+
map.put("k0", v0);
37+
map.put("k1", v1);
38+
39+
Jsonb jsonb = Jsonb.newBuilder().build();
40+
41+
JsonType<Map<String,UUID>> mapUidType = jsonb.type(Types.mapOf(UUID.class));
42+
String asJson = mapUidType.toJson(map);
43+
44+
Map<String, UUID> fromJson = mapUidType.fromJson(asJson);
45+
46+
assertThat(fromJson).containsKeys("k0", "k1");
47+
assertThat(fromJson.get("k0")).isEqualTo(v0);
48+
assertThat(fromJson.get("k1")).isEqualTo(v1);
49+
}
50+
51+
}

0 commit comments

Comments
 (0)