diff --git a/CHANGELOG.md b/CHANGELOG.md
index 82df01ad4..2911c191e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+### v3.45.0 (2026-03-09)
+* * *
+### Bug Fixes:
+- Fixed JSON request body serialization to send valid JSON payload for API requests.
+
### v3.44.0 (2026-03-02)
* * *
### New Resources:
diff --git a/VERSION b/VERSION
index faf0dcbb0..ff3ff28f6 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-3.44.0
+3.45.0
diff --git a/pom.xml b/pom.xml
index 1f6f8cdda..da3bd9845 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.chargebee
chargebee-java
- 3.44.0
+ 3.45.0
jar
diff --git a/src/main/java/com/chargebee/Environment.java b/src/main/java/com/chargebee/Environment.java
index 61cb4704e..c1c212e5e 100644
--- a/src/main/java/com/chargebee/Environment.java
+++ b/src/main/java/com/chargebee/Environment.java
@@ -37,19 +37,19 @@ public class Environment {
public static final String CHARSET = "UTF-8";
public static final String API_VERSION = "v2";
-
- public static final String LIBRARY_VERSION = "3.44.0";
+
+ public static final String LIBRARY_VERSION = "3.45.0";
private final String apiBaseUrl;
private static Environment defaultEnv; // singleton
-
+
private RequestInterceptor reqInterceptor;
-
+
public Environment(String siteName, String apiKey) {
this(siteName, apiKey, null);
}
-
+
public Environment(String siteName, String apiKey, RequestInterceptor reqInterceptor) {
this.apiKey = apiKey;
this.siteName = siteName;
@@ -59,15 +59,15 @@ public Environment(String siteName, String apiKey, RequestInterceptor reqInterce
this.apiBaseUrl = proto + "://" + siteName + "." + domainSuffix + "/api/" + API_VERSION;
this.retryConfig = RetryConfig.defaultConfig();
}
-
+
public static void configure(String siteName, String apikey) {
Environment.defaultEnv = new Environment(siteName, apikey);
}
-
+
public static void reqInterceptor(RequestInterceptor reqInterceptor) {
defaultConfig().reqInterceptor = reqInterceptor;
}
-
+
public RequestInterceptor reqInterceptor() {
return reqInterceptor;
}
diff --git a/src/main/java/com/chargebee/internal/Params.java b/src/main/java/com/chargebee/internal/Params.java
index 083b97b2d..e2bfaf2d0 100644
--- a/src/main/java/com/chargebee/internal/Params.java
+++ b/src/main/java/com/chargebee/internal/Params.java
@@ -11,15 +11,18 @@
public class Params {
private Map m = new HashMap();
+ private Map rawMap = new HashMap();
public void add(String paramName, Object value) {
if(value == null) {
throw new RuntimeException("The param {" + paramName + "} cannot be null");
}
+ rawMap.put(paramName, value);
m.put(paramName, toValStr(value));
}
public void addOpt(String paramName, Object value) {
+ rawMap.put(paramName, value);
m.put(paramName, value != null ? toValStr(value) : "");
}
@@ -45,7 +48,7 @@ public static Object toValStr(Object value) {
return value.toString();
} else if (c == Date.class) {
return new SimpleDateFormat("yyyy-MM-dd").format((Date)value);
- }
+ }
else if(c.isEnum()) {
return value.toString().toLowerCase();
} else if(c == Timestamp.class) {
@@ -54,16 +57,16 @@ else if(c.isEnum()) {
List origList = ((List)value);
List l = new ArrayList(origList.size());
for (Object item : origList) {
- l.add((String)toValStr(item));
+ l.add((String)toValStr(item));
}
return l;
} else if(value instanceof Object[]){
Object[] origList = ((Object[])value);
List l = new ArrayList(origList.length);
for (Object item : origList) {
- l.add((String)toValStr(item));
+ l.add((String)toValStr(item));
}
- return l;
+ return l;
} else if(value instanceof JSONObject) {
return value.toString();
} else if(value instanceof JSONArray) {
@@ -74,7 +77,12 @@ else if(c.isEnum()) {
throw new RuntimeException("Type [" + c.getName() + "] not handled");
}
}
-
+
+ public String toJson() {
+ JSONObject jsonObject = new JSONObject(rawMap);
+ return jsonObject.toString();
+ }
+
public static Long asUnixTimestamp(Timestamp ts) {
return ts.getTime() / 1000;
}
diff --git a/src/main/java/com/chargebee/internal/Request.java b/src/main/java/com/chargebee/internal/Request.java
index dad5609d9..b65e83d92 100644
--- a/src/main/java/com/chargebee/internal/Request.java
+++ b/src/main/java/com/chargebee/internal/Request.java
@@ -79,7 +79,7 @@ private static Result _request(Environment env, Request> req) throws IOExcepti
return HttpUtil.post(url, ((BatchRequest>) req).buildRequest(), req.headers, env, req.isIdempotent);
} else if(req.isJsonRequest){
req.headers.put(HttpUtil.CONTENT_TYPE_HEADER_NAME, "application/json;charset=" + Environment.CHARSET);
- return HttpUtil.post(url, req.params.toString(), req.headers, env, req.isIdempotent);
+ return HttpUtil.post(url, req.params.toJson(), req.headers, env, req.isIdempotent);
}else {
return HttpUtil.post(url, req.params(), req.headers, env, req.isIdempotent);
}