Skip to content

Commit d91d21d

Browse files
committed
Fixed #118
1 parent 145631f commit d91d21d

File tree

10 files changed

+146
-85
lines changed

10 files changed

+146
-85
lines changed

afterburner/src/main/java/com/fasterxml/jackson/module/afterburner/ser/OptimizedBeanPropertyWriter.java

+1-12
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import com.fasterxml.jackson.databind.*;
1010
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
1111
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
12-
import com.fasterxml.jackson.databind.util.ClassUtil;
1312

1413
/**
1514
* Intermediate base class that is used for concrete
@@ -77,7 +76,7 @@ public void assignSerializer(JsonSerializer<Object> ser) {
7776
}
7877
// 04-Oct-2015, tatu: To fix [module-afterburner#59], need to disable use of
7978
// fully optimized variant
80-
if (!isDefaultSerializer(ser)) {
79+
if (!SerializerUtil.isDefaultSerializer(ser)) {
8180
broken = true;
8281
}
8382
}
@@ -130,14 +129,4 @@ protected void _reportProblem(Object bean, Throwable e)
130129
e.getClass().getName(), e.getMessage());
131130
Logger.getLogger(OptimizedBeanPropertyWriter.class.getName()).log(Level.WARNING, msg, e);
132131
}
133-
134-
/**
135-
* Helper method used to check whether given serializer is the default
136-
* serializer implementation: this is necessary to avoid overriding other
137-
* kinds of deserializers.
138-
*/
139-
protected boolean isDefaultSerializer(JsonSerializer<?> ser)
140-
{
141-
return (ser == null) || ClassUtil.isJacksonStdImpl(ser);
142-
}
143132
}

afterburner/src/main/java/com/fasterxml/jackson/module/afterburner/ser/SerializerModifier.java

+2-22
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
import com.fasterxml.jackson.databind.introspect.AnnotatedMember;
99
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
1010
import com.fasterxml.jackson.databind.ser.*;
11-
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
12-
import com.fasterxml.jackson.databind.util.ClassUtil;
11+
1312
import com.fasterxml.jackson.module.afterburner.util.MyClassLoader;
1413

1514
public class SerializerModifier extends BeanSerializerModifier
@@ -94,7 +93,7 @@ protected PropertyAccessorCollector findProperties(Class<?> beanClass,
9493

9594
// 30-Jul-2012, tatu: [#6]: Needs to skip custom serializers, if any.
9695
if (bpw.hasSerializer()) {
97-
if (!isDefaultSerializer(config, bpw.getSerializer())) {
96+
if (!SerializerUtil.isDefaultSerializer(bpw.getSerializer())) {
9897
continue;
9998
}
10099
}
@@ -156,23 +155,4 @@ protected PropertyAccessorCollector findProperties(Class<?> beanClass,
156155
}
157156
return collector;
158157
}
159-
160-
/**
161-
* Helper method used to check whether given serializer is the default
162-
* serializer implementation: this is necessary to avoid overriding other
163-
* kinds of serializers.
164-
*/
165-
protected boolean isDefaultSerializer(SerializationConfig config,
166-
JsonSerializer<?> ser)
167-
{
168-
if (ClassUtil.isJacksonStdImpl(ser)) {
169-
// 20-Nov-2020, tatu: As per [modules-base#117], need to consider
170-
// one standard serializer that should not be replaced...
171-
if (ser instanceof ToStringSerializer) {
172-
return false;
173-
}
174-
return true;
175-
}
176-
return false;
177-
}
178158
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.fasterxml.jackson.module.afterburner.ser;
2+
3+
import com.fasterxml.jackson.databind.JsonSerializer;
4+
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
5+
import com.fasterxml.jackson.databind.util.ClassUtil;
6+
7+
/**
8+
* Helper class that contains utility methods needed by various other classes
9+
* in this package.
10+
*
11+
* @since 2.12
12+
*/
13+
class SerializerUtil
14+
{
15+
/**
16+
* Helper method used to check whether given serializer is the default
17+
* serializer implementation: this is necessary to avoid overriding other
18+
* kinds of serializers.
19+
*/
20+
public static boolean isDefaultSerializer(JsonSerializer<?> ser)
21+
{
22+
if (ser == null) {
23+
return true;
24+
}
25+
if (ClassUtil.isJacksonStdImpl(ser)) {
26+
// 20-Nov-2020, tatu: As per [modules-base#117], need to consider
27+
// one standard serializer that should not be replaced...
28+
if (ser instanceof ToStringSerializer) {
29+
return false;
30+
}
31+
return true;
32+
}
33+
return false;
34+
}
35+
}

afterburner/src/test/java/com/fasterxml/jackson/module/afterburner/failing/JsonFormatForSer117Test.java

-26
This file was deleted.

afterburner/src/test/java/com/fasterxml/jackson/module/afterburner/ser/JDKScalarsSerTest.java

+32-1
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,34 @@
11
package com.fasterxml.jackson.module.afterburner.ser;
22

3+
import com.fasterxml.jackson.annotation.JsonFormat;
4+
35
import com.fasterxml.jackson.databind.ObjectMapper;
46
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
57
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
68

79
import com.fasterxml.jackson.module.afterburner.AfterburnerTestBase;
810

9-
// [modules-base#117]
1011
public class JDKScalarsSerTest extends AfterburnerTestBase
1112
{
13+
// [modules-base#117]
1214
static class Bean117UsingJsonSerialize {
1315
@JsonSerialize(using = ToStringSerializer.class)
1416
public int getValue() {
1517
return 42;
1618
}
1719
}
1820

21+
// [modules-base#118]
22+
static class Bean118IntUsingJsonFormat {
23+
@JsonFormat(shape = JsonFormat.Shape.STRING)
24+
public int value = 42;
25+
}
26+
27+
static class Bean118LongUsingJsonFormat {
28+
@JsonFormat(shape = JsonFormat.Shape.STRING)
29+
public long value = -137L;
30+
}
31+
1932
private final ObjectMapper MAPPER = newObjectMapper();
2033
private final ObjectMapper VANILLA_MAPPER = newVanillaJSONMapper();
2134

@@ -27,4 +40,22 @@ public void testIntAsStringWithJsonSerialize() throws Exception
2740
assertEquals(EXP_JSON, VANILLA_MAPPER.writeValueAsString(input));
2841
assertEquals(EXP_JSON, MAPPER.writeValueAsString(input));
2942
}
43+
44+
// [modules-base#118]
45+
public void testIntAsStringWithJsonFormat() throws Exception
46+
{
47+
final String EXP_JSON = "{\"value\":\"42\"}";
48+
final Object input = new Bean118IntUsingJsonFormat();
49+
assertEquals(EXP_JSON, VANILLA_MAPPER.writeValueAsString(input));
50+
assertEquals(EXP_JSON, MAPPER.writeValueAsString(input));
51+
}
52+
53+
// [modules-base#118]
54+
public void testLongAsStringWithJsonFormat() throws Exception
55+
{
56+
final String EXP_JSON = "{\"value\":\"-137\"}";
57+
final Object input = new Bean118LongUsingJsonFormat();
58+
assertEquals(EXP_JSON, VANILLA_MAPPER.writeValueAsString(input));
59+
assertEquals(EXP_JSON, MAPPER.writeValueAsString(input));
60+
}
3061
}

blackbird/src/main/java/com/fasterxml/jackson/module/blackbird/ser/BBSerializerModifier.java

+2-22
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@
1717
import com.fasterxml.jackson.databind.introspect.AnnotatedMember;
1818
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
1919
import com.fasterxml.jackson.databind.ser.*;
20-
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
21-
import com.fasterxml.jackson.databind.util.ClassUtil;
20+
2221
import com.fasterxml.jackson.module.blackbird.util.ReflectionHack;
2322
import com.fasterxml.jackson.module.blackbird.util.Unchecked;
2423

@@ -83,7 +82,7 @@ protected void createProperty(ListIterator<BeanPropertyWriter> it, Lookup lookup
8382
// (although, interestingly enough, can seem to access private classes...)
8483

8584
// 30-Jul-2012, tatu: [#6]: Needs to skip custom serializers, if any.
86-
if (bpw.hasSerializer() && !isDefaultSerializer(config, bpw.getSerializer())) {
85+
if (bpw.hasSerializer() && !SerializerUtil.isDefaultSerializer(bpw.getSerializer())) {
8786
return;
8887
}
8988
// [#9]: also skip unwrapping stuff...
@@ -161,23 +160,4 @@ protected void createProperty(ListIterator<BeanPropertyWriter> it, Lookup lookup
161160
}
162161
}
163162
}
164-
165-
/**
166-
* Helper method used to check whether given serializer is the default
167-
* serializer implementation: this is necessary to avoid overriding other
168-
* kinds of serializers.
169-
*/
170-
protected boolean isDefaultSerializer(SerializationConfig config,
171-
JsonSerializer<?> ser)
172-
{
173-
if (ClassUtil.isJacksonStdImpl(ser)) {
174-
// 20-Nov-2020, tatu: As per [modules-base#117], need to consider
175-
// one standard serializer that should not be replaced...
176-
if (ser instanceof ToStringSerializer) {
177-
return false;
178-
}
179-
return true;
180-
}
181-
return false;
182-
}
183163
}

blackbird/src/main/java/com/fasterxml/jackson/module/blackbird/ser/OptimizedBeanPropertyWriter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public void assignSerializer(JsonSerializer<Object> ser) {
7878
}
7979
// 04-Oct-2015, tatu: To fix [module-afterburner#59], need to disable use of
8080
// fully optimized variant
81-
if (!isDefaultSerializer(ser)) {
81+
if (!SerializerUtil.isDefaultSerializer(ser)) {
8282
broken = true;
8383
}
8484
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.fasterxml.jackson.module.blackbird.ser;
2+
3+
import com.fasterxml.jackson.databind.JsonSerializer;
4+
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
5+
import com.fasterxml.jackson.databind.util.ClassUtil;
6+
7+
/**
8+
* Helper class that contains utility methods needed by various other classes
9+
* in this package.
10+
*
11+
* @since 2.12
12+
*/
13+
class SerializerUtil
14+
{
15+
/**
16+
* Helper method used to check whether given serializer is the default
17+
* serializer implementation: this is necessary to avoid overriding other
18+
* kinds of serializers.
19+
*/
20+
public static boolean isDefaultSerializer(JsonSerializer<?> ser)
21+
{
22+
if (ser == null) {
23+
return true;
24+
}
25+
if (ClassUtil.isJacksonStdImpl(ser)) {
26+
// 20-Nov-2020, tatu: As per [modules-base#117], need to consider
27+
// one standard serializer that should not be replaced...
28+
if (ser instanceof ToStringSerializer) {
29+
return false;
30+
}
31+
return true;
32+
}
33+
return false;
34+
}
35+
}

blackbird/src/test/java/com/fasterxml/jackson/module/blackbird/ser/JDKScalarsSerTest.java

+36-1
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,38 @@
11
package com.fasterxml.jackson.module.blackbird.ser;
22

3+
import com.fasterxml.jackson.annotation.JsonFormat;
4+
35
import com.fasterxml.jackson.databind.ObjectMapper;
46
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
57
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
68

79
import com.fasterxml.jackson.module.blackbird.BlackbirdTestBase;
810

9-
// [modules-base#117]
1011
public class JDKScalarsSerTest extends BlackbirdTestBase
1112
{
13+
// [modules-base#117]
1214
static class Bean117UsingJsonSerialize {
1315
@JsonSerialize(using = ToStringSerializer.class)
1416
public int getValue() {
1517
return 42;
1618
}
1719
}
1820

21+
// [modules-base#118]
22+
static class Bean118IntUsingJsonFormat {
23+
@JsonFormat(shape = JsonFormat.Shape.STRING)
24+
public int getValue() {
25+
return 42;
26+
}
27+
}
28+
29+
static class Bean118LongUsingJsonFormat {
30+
@JsonFormat(shape = JsonFormat.Shape.STRING)
31+
public long getValue() {
32+
return -137L;
33+
}
34+
}
35+
1936
private final ObjectMapper MAPPER = newObjectMapper();
2037
private final ObjectMapper VANILLA_MAPPER = newVanillaJSONMapper();
2138

@@ -27,4 +44,22 @@ public void testIntAsStringWithJsonSerialize() throws Exception
2744
assertEquals(EXP_JSON, VANILLA_MAPPER.writeValueAsString(input));
2845
assertEquals(EXP_JSON, MAPPER.writeValueAsString(input));
2946
}
47+
48+
// [modules-base#118]
49+
public void testIntAsStringWithJsonFormat() throws Exception
50+
{
51+
final String EXP_JSON = "{\"value\":\"42\"}";
52+
final Object input = new Bean118IntUsingJsonFormat();
53+
assertEquals(EXP_JSON, VANILLA_MAPPER.writeValueAsString(input));
54+
assertEquals(EXP_JSON, MAPPER.writeValueAsString(input));
55+
}
56+
57+
// [modules-base#118]
58+
public void testLongAsStringWithJsonFormat() throws Exception
59+
{
60+
final String EXP_JSON = "{\"value\":\"-137\"}";
61+
final Object input = new Bean118LongUsingJsonFormat();
62+
assertEquals(EXP_JSON, VANILLA_MAPPER.writeValueAsString(input));
63+
assertEquals(EXP_JSON, MAPPER.writeValueAsString(input));
64+
}
3065
}

release-notes/VERSION-2.x

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ Modules:
2323
#117: (afterburner) Use of `ToStringSerializer` via `@JsonSerialize` on `int`/`long`
2424
property does not work
2525
(reported by wujimin@github)
26+
#118: (afterburner) Using `@JsonFormat(shape = JsonFormat.Shape.STRING)` on `int`,
27+
`long` properties not working
2628
- Add Gradle Module Metadata (https://blog.gradle.org/alignment-with-gradle-module-metadata)
2729

2830
2.11.3 (02-Oct-2020)

0 commit comments

Comments
 (0)