Skip to content

Commit

Permalink
test: jackson兼容问题
Browse files Browse the repository at this point in the history
  • Loading branch information
mySingleLive committed Feb 26, 2024
1 parent 67869cf commit 8712765
Show file tree
Hide file tree
Showing 51 changed files with 216 additions and 113 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,16 @@
import com.dtflys.forest.http.Lazy;
import com.dtflys.forest.utils.ForestDataType;
import com.dtflys.forest.utils.StringUtils;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationConfig;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider;
import com.fasterxml.jackson.databind.ser.SerializerFactory;

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

public ForestJacksonConverter() {
this.mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(Lazy.class, new LazySerializer());
this.mapper.registerModule(module);
this.mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
this.mapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false);
}

private static class LazySerializer extends JsonSerializer<Lazy> {

@Override
public void serialize(Lazy lazy, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeStartObject();
jsonGenerator.writeEndObject();
// jsonGenerator.writeObject(lazy);
/*ForestRequest request = (ForestRequest) serializerProvider.getAttribute("request");
ConvertOptions options = (ConvertOptions) serializerProvider.getAttribute("options");
if (!Lazy.isEvaluatingLazyValue(lazy, request)) {
if (options != null) {
final Object evalValue = options.getValue(lazy, request);
if (!options.shouldIgnore(evalValue)) {
jsonGenerator.writeObject(evalValue);
}
}
}*/
}
}

/**
* 获取Jackson的Mapper对象
* @return Jackson的Mapper对象,{@link ObjectMapper}类实例
Expand Down Expand Up @@ -180,9 +210,10 @@ public Map<String, Object> convertObjectToMap(final Object obj, final ForestRequ
if (obj instanceof CharSequence) {
return convertToJavaObject(obj.toString(), LinkedHashMap.class);
}

final JavaType javaType = getMapper().getTypeFactory().constructMapType(LinkedHashMap.class, String.class, Object.class);
return getMapper().convertValue(obj, javaType);
final ObjectMapper objectMapper = getMapper();
final JavaType javaType = objectMapper.getTypeFactory().constructMapType(LinkedHashMap.class, String.class, Object.class);
final Map<String, Object> map = objectMapper.convertValue(obj, javaType);
return map;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.dtflys.forest.backend.HttpBackend;
import com.dtflys.forest.converter.ConvertOptions;
import com.dtflys.forest.converter.ForestEncoder;
import com.dtflys.forest.converter.json.ForestJsonConverter;
import com.dtflys.forest.exceptions.ForestRuntimeException;
import com.dtflys.forest.http.ForestAddress;
import com.dtflys.forest.http.ForestAsyncMode;
Expand Down Expand Up @@ -81,8 +82,8 @@ public class TestGenericForestClient extends BaseClientTest {
@Rule
public final MockWebServer server = new MockWebServer();

public TestGenericForestClient(HttpBackend backend) {
super(backend, Forest.config());
public TestGenericForestClient(String backend, String jsonConverter) {
super(backend, jsonConverter, Forest.config());
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.dtflys.forest.backend.HttpBackend;
import com.dtflys.forest.config.ForestConfiguration;
import com.dtflys.forest.converter.json.ForestJsonConverter;
import com.dtflys.test.http.BaseClientTest;
import com.dtflys.test.http.client.ProtobufClient;
import com.dtflys.test.mock.ProtobufMockServer;
Expand Down Expand Up @@ -35,8 +36,8 @@ public class TestForestProtobufConverter extends BaseClientTest {

private static ProtobufClient protobufClient;

public TestForestProtobufConverter(HttpBackend backend) {
super(backend, configuration);
public TestForestProtobufConverter(String backend, String jsonConverter) {
super(backend, jsonConverter, configuration);
configuration.setVariableValue("port", server.getPort());

}
Expand Down
41 changes: 34 additions & 7 deletions forest-core/src/test/java/com/dtflys/test/http/BaseClientTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@
import com.dtflys.forest.backend.httpclient.HttpclientBackend;
import com.dtflys.forest.backend.okhttp3.OkHttp3Backend;
import com.dtflys.forest.config.ForestConfiguration;
import com.dtflys.forest.converter.json.ForestFastjson2Converter;
import com.dtflys.forest.converter.json.ForestFastjsonConverter;
import com.dtflys.forest.converter.json.ForestJacksonConverter;
import com.dtflys.forest.converter.json.ForestJsonConverter;
import com.dtflys.forest.exceptions.ForestRuntimeException;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
Expand All @@ -28,18 +33,40 @@ public abstract class BaseClientTest {

protected HttpBackend backend;

public BaseClientTest(HttpBackend backend, ForestConfiguration configuration) {
this.backend = backend;
protected ForestJsonConverter jsonConverter;

public BaseClientTest(String backendName, String jsonConverterName, ForestConfiguration configuration) {
this.backend = configuration.getBackendSelector().select(backendName);
this.jsonConverter = selectJsonConverter(jsonConverterName);
configuration.setCacheEnabled(false);
configuration.setBackend(backend);
configuration.setBackend(this.backend);
configuration.setJsonConverter(this.jsonConverter);
}

private ForestJsonConverter selectJsonConverter(String converterName) {
switch (converterName) {
case "jackson":
return new ForestJacksonConverter();
case "fastjson":
return new ForestFastjsonConverter();
case "fastjson2":
return new ForestFastjson2Converter();
}
throw new ForestRuntimeException(converterName + " dose not support");
}

@Parameterized.Parameters
@Parameterized.Parameters(name = " {index} : {0} - {1} ")
public static Collection backendList() {
return Arrays.asList(
new HttpBackend[][] {
{new HttpclientBackend()},
{new OkHttp3Backend()}});
new Object[][] {
{"httpclient", "jackson"},
{"httpclient", "fastjson"},
{"httpclient", "fastjson2"},

{"okhttp3", "jackson"},
{"okhttp3", "fastjson"},
{"okhttp3", "fastjson2"}
});
}

@After
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import com.dtflys.forest.backend.httpclient.HttpclientBackend;
import com.dtflys.forest.backend.okhttp3.OkHttp3Backend;
import com.dtflys.forest.config.ForestConfiguration;
import com.dtflys.forest.converter.json.ForestFastjson2Converter;
import com.dtflys.forest.converter.json.ForestJsonConverter;
import com.dtflys.forest.exceptions.ForestNetworkException;
import com.dtflys.forest.http.ForestAsyncMode;
import com.dtflys.forest.http.ForestFuture;
Expand Down Expand Up @@ -85,7 +87,7 @@ public static Collection backendList() {
}

public TestAsyncGetClient(AsyncTestParameter parameter) {
super(parameter.backend, configuration);
super(parameter.backend.getName(), "fastjson2", configuration);
configuration.setAsyncMode(parameter.asyncMode);
configuration.setVariableValue("port", server.getPort());
getClient = configuration.createInstance(GetClient.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.dtflys.forest.backend.HttpBackend;
import com.dtflys.forest.config.ForestConfiguration;
import com.dtflys.forest.converter.json.ForestJsonConverter;
import com.dtflys.forest.http.ForestRequest;
import com.dtflys.forest.http.ForestResponse;
import com.dtflys.forest.interceptor.Interceptor;
Expand Down Expand Up @@ -51,8 +52,8 @@ public static void prepareClient() {
configuration = ForestConfiguration.createConfiguration();
}

public TestBaseReqClient(HttpBackend backend) {
super(backend, configuration);
public TestBaseReqClient(String backend, String jsonConverter) {
super(backend, jsonConverter, configuration);
configuration.setVariableValue("baseURL", "http://localhost:5000/");
configuration.setVariableValue("userAgent", USER_AGENT);
configuration.setVariableValue("port", server.getPort());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.dtflys.forest.backend.HttpBackend;
import com.dtflys.forest.config.ForestConfiguration;
import com.dtflys.forest.converter.json.ForestJsonConverter;
import com.dtflys.test.http.client.BaseReqAddressClient;
import com.dtflys.test.http.client.BaseReqVarClient;
import okhttp3.mockwebserver.MockResponse;
Expand All @@ -19,7 +20,7 @@
* @Date: 2023/9/14 9:42
* @Version 1.0
*/
public class TestBaseReqVarClient extends BaseClientTest{
public class TestBaseReqVarClient extends BaseClientTest {

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

Expand All @@ -37,8 +38,8 @@ public class TestBaseReqVarClient extends BaseClientTest{
public static void prepareClient() {
configuration = ForestConfiguration.createConfiguration();
}
public TestBaseReqVarClient(HttpBackend backend) {
super(backend, configuration);
public TestBaseReqVarClient(String backend, String jsonConverter) {
super(backend, jsonConverter, configuration);
configuration.setVariableValue("port", server.getPort());
configuration.setVariableValue("baseURL", "http://localhost:" + server.getPort() + "/a/");
baseReqVarClient = configuration.createInstance(BaseReqVarClient.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.dtflys.forest.backend.HttpBackend;
import com.dtflys.forest.config.ForestConfiguration;
import com.dtflys.forest.converter.json.ForestJsonConverter;
import com.dtflys.forest.http.ForestRequest;
import com.dtflys.test.http.client.BaseURLPortClient;
import okhttp3.mockwebserver.MockWebServer;
Expand All @@ -15,7 +16,7 @@
* @Date: 2023/9/14 10:03
* @Version 1.0
*/
public class TestBaseURLPortClient extends BaseClientTest{
public class TestBaseURLPortClient extends BaseClientTest {

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

Expand All @@ -31,8 +32,8 @@ public class TestBaseURLPortClient extends BaseClientTest{
public static void prepareClient() {
configuration = ForestConfiguration.createConfiguration();
}
public TestBaseURLPortClient(HttpBackend backend) {
super(backend, configuration);
public TestBaseURLPortClient(String backend, String jsonConverter) {
super(backend, jsonConverter, configuration);
configuration.setVariableValue("port", server.getPort());
configuration.setVariableValue("baseURL", "http://localhost:" + server.getPort() +"/user");
baseURLPortClient = configuration.createInstance(BaseURLPortClient.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.dtflys.forest.backend.HttpBackend;
import com.dtflys.forest.backend.httpclient.HttpclientBackend;
import com.dtflys.forest.config.ForestConfiguration;
import com.dtflys.forest.converter.json.ForestJsonConverter;
import com.dtflys.forest.mock.MockServerRequest;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
Expand All @@ -28,8 +29,8 @@ public class TestBodyAnnotation extends BaseClientTest {
public final MockWebServer server = new MockWebServer();
private final TestBodyAnnotationClient testBodyAnnotationClient;

public TestBodyAnnotation(HttpBackend backend) {
super(backend, configuration);
public TestBodyAnnotation(String backend, String jsonConverter) {
super(backend, jsonConverter, configuration);
configuration.setVariableValue("port", server.getPort());
testBodyAnnotationClient = configuration.createInstance(TestBodyAnnotationClient.class);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.dtflys.forest.backend.HttpBackend;
import com.dtflys.forest.config.ForestConfiguration;
import com.dtflys.forest.converter.json.ForestJsonConverter;
import com.dtflys.test.http.client.CallbackClient;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
Expand Down Expand Up @@ -39,8 +40,8 @@ public static void prepareClient() {
public void afterRequests() {
}

public TestCallbackClient(HttpBackend backend) {
super(backend, configuration);
public TestCallbackClient(String backend, String jsonConverter) {
super(backend, jsonConverter, configuration);
configuration.setVariableValue("port", server.getPort());
callbackClient = configuration.createInstance(CallbackClient.class);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.dtflys.forest.backend.HttpBackend;
import com.dtflys.forest.config.ForestConfiguration;
import com.dtflys.forest.converter.json.ForestJsonConverter;
import com.dtflys.forest.http.ForestCookie;
import com.dtflys.forest.http.ForestResponse;
import com.dtflys.test.http.client.CookieClient;
Expand Down Expand Up @@ -44,8 +45,8 @@ public static void prepareClient() {
public void afterRequests() {
}

public TestCookieClient(HttpBackend backend) {
super(backend, configuration);
public TestCookieClient(String backend, String jsonConverter) {
super(backend, jsonConverter, configuration);
configuration.setVariableValue("port", server.getPort());
cookieClient = configuration.createInstance(CookieClient.class);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.dtflys.forest.backend.HttpBackend;
import com.dtflys.forest.config.ForestConfiguration;
import com.dtflys.forest.converter.json.ForestJsonConverter;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
import org.apache.http.HttpHeaders;
Expand Down Expand Up @@ -34,8 +35,8 @@ public static void prepareClient() {
configuration = ForestConfiguration.createConfiguration();
}

public TestDeleteClient(HttpBackend backend) {
super(backend, configuration);
public TestDeleteClient(String backend, String jsonConverter) {
super(backend, jsonConverter, configuration);
configuration.setVariableValue("port", server.getPort());
deleteClient = configuration.createInstance(DeleteClient.class);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.dtflys.forest.backend.httpclient.HttpclientBackend;
import com.dtflys.forest.backend.okhttp3.OkHttp3Backend;
import com.dtflys.forest.config.ForestConfiguration;
import com.dtflys.forest.converter.json.ForestJsonConverter;
import com.dtflys.forest.http.ForestResponse;
import com.dtflys.forest.utils.ForestProgress;
import com.dtflys.test.http.client.DownloadClient;
Expand Down Expand Up @@ -54,8 +55,8 @@ public static void prepareClient() {
public void afterRequests() {
}

public TestDownloadClient(HttpBackend backend) {
super(backend, configuration);
public TestDownloadClient(String backend, String jsonConverter) {
super(backend, jsonConverter, configuration);
configuration.setVariableValue("port", server.getPort());
downloadClient = configuration.createInstance(DownloadClient.class);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.dtflys.forest.backend.HttpBackend;
import com.dtflys.forest.config.ForestConfiguration;
import com.dtflys.forest.converter.json.ForestJsonConverter;
import com.dtflys.forest.exceptions.ForestNetworkException;
import com.dtflys.forest.http.ForestResponse;
import com.dtflys.forest.retryer.BackOffRetryer;
Expand Down Expand Up @@ -38,8 +39,8 @@ public static void prepareClient() {
}


public TestErrorClient(HttpBackend backend) {
super(backend, configuration);
public TestErrorClient(String backend, String jsonConverter) {
super(backend, jsonConverter, configuration);
configuration.setVariableValue("port", server.getPort());
getClient = configuration.createInstance(GetClient.class);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.dtflys.forest.backend.ContentType;
import com.dtflys.forest.backend.HttpBackend;
import com.dtflys.forest.config.ForestConfiguration;
import com.dtflys.forest.converter.json.ForestJsonConverter;
import com.dtflys.forest.http.ForestRequest;
import com.dtflys.forest.http.ForestResponse;
import com.dtflys.forest.http.ForestURL;
Expand Down Expand Up @@ -69,8 +70,8 @@ public void afterRequests() {
}


public TestGetClient(HttpBackend backend) {
super(backend, configuration);
public TestGetClient(String backend, String jsonConverter) {
super(backend, jsonConverter, configuration);
configuration.setVariableValue("port", server.getPort());
getClient = configuration.createInstance(GetClient.class);
urlEncodedClient = configuration.createInstance(UrlEncodedClient.class);
Expand Down

0 comments on commit 8712765

Please sign in to comment.