Skip to content

Commit 8712765

Browse files
committed
test: jackson兼容问题
1 parent 67869cf commit 8712765

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+216
-113
lines changed

forest-core/src/main/java/com/dtflys/forest/converter/json/ForestJacksonConverter.java

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,16 @@
3030
import com.dtflys.forest.http.Lazy;
3131
import com.dtflys.forest.utils.ForestDataType;
3232
import com.dtflys.forest.utils.StringUtils;
33+
import com.fasterxml.jackson.core.JsonGenerator;
3334
import com.fasterxml.jackson.databind.DeserializationFeature;
3435
import com.fasterxml.jackson.databind.JavaType;
36+
import com.fasterxml.jackson.databind.JsonSerializer;
3537
import com.fasterxml.jackson.databind.ObjectMapper;
38+
import com.fasterxml.jackson.databind.SerializationConfig;
39+
import com.fasterxml.jackson.databind.SerializerProvider;
40+
import com.fasterxml.jackson.databind.module.SimpleModule;
41+
import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider;
42+
import com.fasterxml.jackson.databind.ser.SerializerFactory;
3643

3744
import java.io.IOException;
3845
import java.lang.reflect.Type;
@@ -62,10 +69,33 @@ public ForestJacksonConverter(final ObjectMapper mapper) {
6269

6370
public ForestJacksonConverter() {
6471
this.mapper = new ObjectMapper();
72+
SimpleModule module = new SimpleModule();
73+
module.addSerializer(Lazy.class, new LazySerializer());
74+
this.mapper.registerModule(module);
6575
this.mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
6676
this.mapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false);
6777
}
6878

79+
private static class LazySerializer extends JsonSerializer<Lazy> {
80+
81+
@Override
82+
public void serialize(Lazy lazy, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
83+
jsonGenerator.writeStartObject();
84+
jsonGenerator.writeEndObject();
85+
// jsonGenerator.writeObject(lazy);
86+
/*ForestRequest request = (ForestRequest) serializerProvider.getAttribute("request");
87+
ConvertOptions options = (ConvertOptions) serializerProvider.getAttribute("options");
88+
if (!Lazy.isEvaluatingLazyValue(lazy, request)) {
89+
if (options != null) {
90+
final Object evalValue = options.getValue(lazy, request);
91+
if (!options.shouldIgnore(evalValue)) {
92+
jsonGenerator.writeObject(evalValue);
93+
}
94+
}
95+
}*/
96+
}
97+
}
98+
6999
/**
70100
* 获取Jackson的Mapper对象
71101
* @return Jackson的Mapper对象,{@link ObjectMapper}类实例
@@ -180,9 +210,10 @@ public Map<String, Object> convertObjectToMap(final Object obj, final ForestRequ
180210
if (obj instanceof CharSequence) {
181211
return convertToJavaObject(obj.toString(), LinkedHashMap.class);
182212
}
183-
184-
final JavaType javaType = getMapper().getTypeFactory().constructMapType(LinkedHashMap.class, String.class, Object.class);
185-
return getMapper().convertValue(obj, javaType);
213+
final ObjectMapper objectMapper = getMapper();
214+
final JavaType javaType = objectMapper.getTypeFactory().constructMapType(LinkedHashMap.class, String.class, Object.class);
215+
final Map<String, Object> map = objectMapper.convertValue(obj, javaType);
216+
return map;
186217
}
187218

188219
@Override

forest-core/src/test/java/com/dtflys/test/TestGenericForestClient.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.dtflys.forest.backend.HttpBackend;
1111
import com.dtflys.forest.converter.ConvertOptions;
1212
import com.dtflys.forest.converter.ForestEncoder;
13+
import com.dtflys.forest.converter.json.ForestJsonConverter;
1314
import com.dtflys.forest.exceptions.ForestRuntimeException;
1415
import com.dtflys.forest.http.ForestAddress;
1516
import com.dtflys.forest.http.ForestAsyncMode;
@@ -81,8 +82,8 @@ public class TestGenericForestClient extends BaseClientTest {
8182
@Rule
8283
public final MockWebServer server = new MockWebServer();
8384

84-
public TestGenericForestClient(HttpBackend backend) {
85-
super(backend, Forest.config());
85+
public TestGenericForestClient(String backend, String jsonConverter) {
86+
super(backend, jsonConverter, Forest.config());
8687
}
8788

8889

forest-core/src/test/java/com/dtflys/test/converter/protobuf/TestForestProtobufConverter.java

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

33
import com.dtflys.forest.backend.HttpBackend;
44
import com.dtflys.forest.config.ForestConfiguration;
5+
import com.dtflys.forest.converter.json.ForestJsonConverter;
56
import com.dtflys.test.http.BaseClientTest;
67
import com.dtflys.test.http.client.ProtobufClient;
78
import com.dtflys.test.mock.ProtobufMockServer;
@@ -35,8 +36,8 @@ public class TestForestProtobufConverter extends BaseClientTest {
3536

3637
private static ProtobufClient protobufClient;
3738

38-
public TestForestProtobufConverter(HttpBackend backend) {
39-
super(backend, configuration);
39+
public TestForestProtobufConverter(String backend, String jsonConverter) {
40+
super(backend, jsonConverter, configuration);
4041
configuration.setVariableValue("port", server.getPort());
4142

4243
}

forest-core/src/test/java/com/dtflys/test/http/BaseClientTest.java

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88
import com.dtflys.forest.backend.httpclient.HttpclientBackend;
99
import com.dtflys.forest.backend.okhttp3.OkHttp3Backend;
1010
import com.dtflys.forest.config.ForestConfiguration;
11+
import com.dtflys.forest.converter.json.ForestFastjson2Converter;
12+
import com.dtflys.forest.converter.json.ForestFastjsonConverter;
13+
import com.dtflys.forest.converter.json.ForestJacksonConverter;
14+
import com.dtflys.forest.converter.json.ForestJsonConverter;
15+
import com.dtflys.forest.exceptions.ForestRuntimeException;
1116
import org.junit.After;
1217
import org.junit.AfterClass;
1318
import org.junit.Before;
@@ -28,18 +33,40 @@ public abstract class BaseClientTest {
2833

2934
protected HttpBackend backend;
3035

31-
public BaseClientTest(HttpBackend backend, ForestConfiguration configuration) {
32-
this.backend = backend;
36+
protected ForestJsonConverter jsonConverter;
37+
38+
public BaseClientTest(String backendName, String jsonConverterName, ForestConfiguration configuration) {
39+
this.backend = configuration.getBackendSelector().select(backendName);
40+
this.jsonConverter = selectJsonConverter(jsonConverterName);
3341
configuration.setCacheEnabled(false);
34-
configuration.setBackend(backend);
42+
configuration.setBackend(this.backend);
43+
configuration.setJsonConverter(this.jsonConverter);
44+
}
45+
46+
private ForestJsonConverter selectJsonConverter(String converterName) {
47+
switch (converterName) {
48+
case "jackson":
49+
return new ForestJacksonConverter();
50+
case "fastjson":
51+
return new ForestFastjsonConverter();
52+
case "fastjson2":
53+
return new ForestFastjson2Converter();
54+
}
55+
throw new ForestRuntimeException(converterName + " dose not support");
3556
}
3657

37-
@Parameterized.Parameters
58+
@Parameterized.Parameters(name = " {index} : {0} - {1} ")
3859
public static Collection backendList() {
3960
return Arrays.asList(
40-
new HttpBackend[][] {
41-
{new HttpclientBackend()},
42-
{new OkHttp3Backend()}});
61+
new Object[][] {
62+
{"httpclient", "jackson"},
63+
{"httpclient", "fastjson"},
64+
{"httpclient", "fastjson2"},
65+
66+
{"okhttp3", "jackson"},
67+
{"okhttp3", "fastjson"},
68+
{"okhttp3", "fastjson2"}
69+
});
4370
}
4471

4572
@After

forest-core/src/test/java/com/dtflys/test/http/TestAsyncGetClient.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import com.dtflys.forest.backend.httpclient.HttpclientBackend;
55
import com.dtflys.forest.backend.okhttp3.OkHttp3Backend;
66
import com.dtflys.forest.config.ForestConfiguration;
7+
import com.dtflys.forest.converter.json.ForestFastjson2Converter;
8+
import com.dtflys.forest.converter.json.ForestJsonConverter;
79
import com.dtflys.forest.exceptions.ForestNetworkException;
810
import com.dtflys.forest.http.ForestAsyncMode;
911
import com.dtflys.forest.http.ForestFuture;
@@ -85,7 +87,7 @@ public static Collection backendList() {
8587
}
8688

8789
public TestAsyncGetClient(AsyncTestParameter parameter) {
88-
super(parameter.backend, configuration);
90+
super(parameter.backend.getName(), "fastjson2", configuration);
8991
configuration.setAsyncMode(parameter.asyncMode);
9092
configuration.setVariableValue("port", server.getPort());
9193
getClient = configuration.createInstance(GetClient.class);

forest-core/src/test/java/com/dtflys/test/http/TestBaseReqClient.java

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

33
import com.dtflys.forest.backend.HttpBackend;
44
import com.dtflys.forest.config.ForestConfiguration;
5+
import com.dtflys.forest.converter.json.ForestJsonConverter;
56
import com.dtflys.forest.http.ForestRequest;
67
import com.dtflys.forest.http.ForestResponse;
78
import com.dtflys.forest.interceptor.Interceptor;
@@ -51,8 +52,8 @@ public static void prepareClient() {
5152
configuration = ForestConfiguration.createConfiguration();
5253
}
5354

54-
public TestBaseReqClient(HttpBackend backend) {
55-
super(backend, configuration);
55+
public TestBaseReqClient(String backend, String jsonConverter) {
56+
super(backend, jsonConverter, configuration);
5657
configuration.setVariableValue("baseURL", "http://localhost:5000/");
5758
configuration.setVariableValue("userAgent", USER_AGENT);
5859
configuration.setVariableValue("port", server.getPort());

forest-core/src/test/java/com/dtflys/test/http/TestBaseReqVarClient.java

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

33
import com.dtflys.forest.backend.HttpBackend;
44
import com.dtflys.forest.config.ForestConfiguration;
5+
import com.dtflys.forest.converter.json.ForestJsonConverter;
56
import com.dtflys.test.http.client.BaseReqAddressClient;
67
import com.dtflys.test.http.client.BaseReqVarClient;
78
import okhttp3.mockwebserver.MockResponse;
@@ -19,7 +20,7 @@
1920
* @Date: 2023/9/14 9:42
2021
* @Version 1.0
2122
*/
22-
public class TestBaseReqVarClient extends BaseClientTest{
23+
public class TestBaseReqVarClient extends BaseClientTest {
2324

2425
public final static String EXPECTED = "{\"status\":\"ok\"}";
2526

@@ -37,8 +38,8 @@ public class TestBaseReqVarClient extends BaseClientTest{
3738
public static void prepareClient() {
3839
configuration = ForestConfiguration.createConfiguration();
3940
}
40-
public TestBaseReqVarClient(HttpBackend backend) {
41-
super(backend, configuration);
41+
public TestBaseReqVarClient(String backend, String jsonConverter) {
42+
super(backend, jsonConverter, configuration);
4243
configuration.setVariableValue("port", server.getPort());
4344
configuration.setVariableValue("baseURL", "http://localhost:" + server.getPort() + "/a/");
4445
baseReqVarClient = configuration.createInstance(BaseReqVarClient.class);

forest-core/src/test/java/com/dtflys/test/http/TestBaseURLPortClient.java

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

33
import com.dtflys.forest.backend.HttpBackend;
44
import com.dtflys.forest.config.ForestConfiguration;
5+
import com.dtflys.forest.converter.json.ForestJsonConverter;
56
import com.dtflys.forest.http.ForestRequest;
67
import com.dtflys.test.http.client.BaseURLPortClient;
78
import okhttp3.mockwebserver.MockWebServer;
@@ -15,7 +16,7 @@
1516
* @Date: 2023/9/14 10:03
1617
* @Version 1.0
1718
*/
18-
public class TestBaseURLPortClient extends BaseClientTest{
19+
public class TestBaseURLPortClient extends BaseClientTest {
1920

2021
public final static String EXPECTED = "{\"status\":\"ok\"}";
2122

@@ -31,8 +32,8 @@ public class TestBaseURLPortClient extends BaseClientTest{
3132
public static void prepareClient() {
3233
configuration = ForestConfiguration.createConfiguration();
3334
}
34-
public TestBaseURLPortClient(HttpBackend backend) {
35-
super(backend, configuration);
35+
public TestBaseURLPortClient(String backend, String jsonConverter) {
36+
super(backend, jsonConverter, configuration);
3637
configuration.setVariableValue("port", server.getPort());
3738
configuration.setVariableValue("baseURL", "http://localhost:" + server.getPort() +"/user");
3839
baseURLPortClient = configuration.createInstance(BaseURLPortClient.class);

forest-core/src/test/java/com/dtflys/test/http/TestBodyAnnotation.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.dtflys.forest.backend.HttpBackend;
77
import com.dtflys.forest.backend.httpclient.HttpclientBackend;
88
import com.dtflys.forest.config.ForestConfiguration;
9+
import com.dtflys.forest.converter.json.ForestJsonConverter;
910
import com.dtflys.forest.mock.MockServerRequest;
1011
import okhttp3.mockwebserver.MockResponse;
1112
import okhttp3.mockwebserver.MockWebServer;
@@ -28,8 +29,8 @@ public class TestBodyAnnotation extends BaseClientTest {
2829
public final MockWebServer server = new MockWebServer();
2930
private final TestBodyAnnotationClient testBodyAnnotationClient;
3031

31-
public TestBodyAnnotation(HttpBackend backend) {
32-
super(backend, configuration);
32+
public TestBodyAnnotation(String backend, String jsonConverter) {
33+
super(backend, jsonConverter, configuration);
3334
configuration.setVariableValue("port", server.getPort());
3435
testBodyAnnotationClient = configuration.createInstance(TestBodyAnnotationClient.class);
3536
}

forest-core/src/test/java/com/dtflys/test/http/TestCallbackClient.java

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

33
import com.dtflys.forest.backend.HttpBackend;
44
import com.dtflys.forest.config.ForestConfiguration;
5+
import com.dtflys.forest.converter.json.ForestJsonConverter;
56
import com.dtflys.test.http.client.CallbackClient;
67
import okhttp3.mockwebserver.MockResponse;
78
import okhttp3.mockwebserver.MockWebServer;
@@ -39,8 +40,8 @@ public static void prepareClient() {
3940
public void afterRequests() {
4041
}
4142

42-
public TestCallbackClient(HttpBackend backend) {
43-
super(backend, configuration);
43+
public TestCallbackClient(String backend, String jsonConverter) {
44+
super(backend, jsonConverter, configuration);
4445
configuration.setVariableValue("port", server.getPort());
4546
callbackClient = configuration.createInstance(CallbackClient.class);
4647
}

0 commit comments

Comments
 (0)