Skip to content

Commit 2aebdec

Browse files
committed
Merge branch '2.18'
2 parents 10ef231 + 433b361 commit 2aebdec

File tree

5 files changed

+61
-4
lines changed

5 files changed

+61
-4
lines changed

.github/workflows/cifuzz.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
dry-run: false
3131
language: jvm
3232
- name: Upload Crash
33-
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
33+
uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
3434
if: failure() && steps.build.outcome == 'success'
3535
with:
3636
name: artifacts

.github/workflows/codeql-analysis.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ jobs:
2727

2828
# Initializes the CodeQL tools for scanning.
2929
- name: Initialize CodeQL
30-
uses: github/codeql-action/init@b611370bb5703a7efb587f9d136a52ea24c5c38c # v3.25.11
30+
uses: github/codeql-action/init@afb54ba388a7dca6ecae48f608c4ff05ff4cc77a # v3.25.15
3131
with:
3232
languages: ${{ matrix.language }}
3333

3434
- name: Autobuild
35-
uses: github/codeql-action/autobuild@b611370bb5703a7efb587f9d136a52ea24c5c38c # v3.25.11
35+
uses: github/codeql-action/autobuild@afb54ba388a7dca6ecae48f608c4ff05ff4cc77a # v3.25.15
3636

3737
- name: Perform CodeQL Analysis
38-
uses: github/codeql-action/analyze@b611370bb5703a7efb587f9d136a52ea24c5c38c # v3.25.11
38+
uses: github/codeql-action/analyze@afb54ba388a7dca6ecae48f608c4ff05ff4cc77a # v3.25.15

src/main/java/tools/jackson/databind/JacksonModule.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ public static interface SetupContext
183183
*
184184
* @param d Object that can be called to find deserializer for types supported
185185
* by module (null returned for non-supported types)
186+
* @see #addKeyDeserializers is used to register key deserializers (for Map keys)
186187
*/
187188
public SetupContext addDeserializers(Deserializers d);
188189

@@ -223,6 +224,7 @@ public static interface SetupContext
223224
*
224225
* @param s Object that can be called to find serializer for types supported
225226
* by module (null returned for non-supported types)
227+
* @see #addKeySerializers is used to register key serializers (for Map keys)
226228
*/
227229
public SetupContext addSerializers(Serializers s);
228230

src/main/java/tools/jackson/databind/module/SimpleModule.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ protected SimpleModule setNamingStrategy(PropertyNamingStrategy naming) {
285285
* Possible earlier addition of a serializer for a given Class will be replaced.
286286
* <p>
287287
* NOTE: This method registers "default" (de)serializers only. See a note on precedence in class JavaDoc.
288+
* @see #addKeySerializer(Class, JsonSerializer) is used to register key serializers (for Map keys)
288289
*/
289290
public SimpleModule addSerializer(ValueSerializer<?> ser)
290291
{
@@ -309,6 +310,7 @@ public SimpleModule addSerializer(ValueSerializer<?> ser)
309310
* Possible earlier addition of a serializer for a given Class will be replaced.
310311
* <p>
311312
* NOTE: This method registers "default" (de)serializers only. See a note on precedence in class JavaDoc.
313+
* @see #addKeySerializer(Class, JsonSerializer) is used to register key serializers (for Map keys)
312314
*/
313315
public <T> SimpleModule addSerializer(Class<? extends T> type, ValueSerializer<T> ser)
314316
{
@@ -352,6 +354,7 @@ public <T> SimpleModule addKeySerializer(Class<? extends T> type, ValueSerialize
352354
* Possible earlier addition of a serializer for a given Class will be replaced.
353355
* <p>
354356
* NOTE: This method registers "default" (de)serializers only. See a note on precedence in class JavaDoc.
357+
* @see #addKeyDeserializer(Class, KeyDeserializer) is used to register key deserializers (for Map keys)
355358
*/
356359
public <T> SimpleModule addDeserializer(Class<T> type, ValueDeserializer<? extends T> deser)
357360
{

src/test/java/tools/jackson/databind/ser/jdk/NumberSerTest.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
package tools.jackson.databind.ser.jdk;
22

3+
import java.io.IOException;
34
import java.math.BigDecimal;
45
import java.math.BigInteger;
6+
import java.text.DecimalFormat;
57

68
import org.junit.jupiter.api.Test;
79

810
import com.fasterxml.jackson.annotation.JsonFormat;
911
import com.fasterxml.jackson.annotation.JsonInclude;
1012
import com.fasterxml.jackson.annotation.JsonProperty;
1113

14+
import tools.jackson.core.JsonGenerator;
15+
import tools.jackson.databind.module.SimpleModule;
1216
import tools.jackson.databind.ObjectMapper;
17+
import tools.jackson.databind.SerializerProvider;
18+
import tools.jackson.databind.ValueSerializer;
1319
import tools.jackson.databind.annotation.JsonSerialize;
1420
import tools.jackson.databind.testutil.DatabindTestUtil;
1521

@@ -80,6 +86,36 @@ static class NumberWrapper {
8086
public NumberWrapper(Number v) { value = v; }
8187
}
8288

89+
static class BigDecimalHolder {
90+
private final BigDecimal value;
91+
92+
public BigDecimalHolder(String num) {
93+
value = new BigDecimal(num);
94+
}
95+
96+
public BigDecimal getValue() {
97+
return value;
98+
}
99+
}
100+
101+
static class BigDecimalAsStringSerializer extends ValueSerializer<BigDecimal> {
102+
private final DecimalFormat df = new DecimalFormat("0.0");
103+
104+
@Override
105+
public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) {
106+
gen.writeString(df.format(value));
107+
}
108+
}
109+
110+
static class BigDecimalAsNumberSerializer extends ValueSerializer<BigDecimal> {
111+
private final DecimalFormat df = new DecimalFormat("0.0");
112+
113+
@Override
114+
public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) {
115+
gen.writeNumber(df.format(value));
116+
}
117+
}
118+
83119
/*
84120
/**********************************************************
85121
/* Test methods
@@ -171,4 +207,20 @@ public void testNumberType() throws Exception
171207
assertEquals(a2q("{'value':123}"), MAPPER.writeValueAsString(new NumberWrapper(BigInteger.valueOf(123))));
172208
assertEquals(a2q("{'value':0.025}"), MAPPER.writeValueAsString(new NumberWrapper(BigDecimal.valueOf(0.025))));
173209
}
210+
211+
@Test
212+
public void testCustomSerializationBigDecimalAsString() throws Exception {
213+
SimpleModule module = new SimpleModule();
214+
module.addSerializer(BigDecimal.class, new BigDecimalAsStringSerializer());
215+
ObjectMapper mapper = jsonMapperBuilder().addModule(module).build();
216+
assertEquals(a2q("{'value':'2.0'}"), mapper.writeValueAsString(new BigDecimalHolder("2")));
217+
}
218+
219+
@Test
220+
public void testCustomSerializationBigDecimalAsNumber() throws Exception {
221+
SimpleModule module = new SimpleModule();
222+
module.addSerializer(BigDecimal.class, new BigDecimalAsNumberSerializer());
223+
ObjectMapper mapper = jsonMapperBuilder().addModule(module).build();
224+
assertEquals(a2q("{'value':2.0}"), mapper.writeValueAsString(new BigDecimalHolder("2")));
225+
}
174226
}

0 commit comments

Comments
 (0)