Skip to content

Commit ed0ec16

Browse files
committed
feat(api): wire int64_as_string into servlets that bypass JsonFormat or PostParams
Five servlets do not get the centralized flag automatically: - GetPaginatedProposalListServlet manually reads the request body (does not use PostParams.getPostParams). Its doPost now explicitly calls JsonFormat.setInt64AsString(Util.getInt64AsStringPost(input)) after reading the body. - GetRewardServlet has a hand-rolled JSON-body POST path (also bypasses PostParams). It now sets the ThreadLocal from the body it parsed and reads JsonFormat.isInt64AsString() to choose between quoted and unquoted output. - GetBurnTrxServlet, GetPendingSizeServlet, and GetTransactionCountByBlockNumServlet build their JSON literal manually (do not go through JsonFormat). They now read JsonFormat.isInt64AsString() to pick the format. Also includes: - GetRewardServlet.doPost: previously delegated to doGet, so the request body was silently ignored on POST. Now parses address (and int64_as_string) from the JSON body when Content-Type is application/json; falls back to the legacy doGet behavior otherwise. - GetBlockServlet.parseParams: extract a named visible local using Util.getVisible(request) for symmetry with how every other servlet in this package reads the flag. - GetBrokerageServlet: replace the duplicated INVALID-address error block with Util.processAddressError.
1 parent 4783f68 commit ed0ec16

7 files changed

Lines changed: 64 additions & 31 deletions

File tree

framework/src/main/java/org/tron/core/services/http/GetBlockServlet.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ private PostParams parseParams(HttpServletRequest request) throws Exception {
4949
params.put("id_or_num", idOrNum);
5050
}
5151
params.put("detail", Boolean.parseBoolean(request.getParameter("detail")));
52-
return new PostParams(JSON.toJSONString(params),
53-
Boolean.parseBoolean(request.getParameter(Util.VISIBLE)));
52+
boolean visible = Util.getVisible(request);
53+
return new PostParams(JSON.toJSONString(params), visible);
5454
}
5555
if (HttpMethod.POST.equals(m)) {
5656
return PostParams.getPostParams(request);

framework/src/main/java/org/tron/core/services/http/GetBrokerageServlet.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.tron.core.services.http;
22

3-
import java.io.IOException;
43
import javax.servlet.http.HttpServletRequest;
54
import javax.servlet.http.HttpServletResponse;
65
import lombok.extern.slf4j.Slf4j;
@@ -27,12 +26,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) {
2726
}
2827
response.getWriter().println("{\"brokerage\": " + value + "}");
2928
} catch (DecoderException | IllegalArgumentException e) {
30-
try {
31-
response.getWriter()
32-
.println("{\"Error\": " + "\"INVALID address, " + e.getMessage() + "\"}");
33-
} catch (IOException ioe) {
34-
logger.debug("IOException: {}", ioe.getMessage());
35-
}
29+
Util.processAddressError(e, response);
3630
} catch (Exception e) {
3731
Util.processError(e, response);
3832
}

framework/src/main/java/org/tron/core/services/http/GetBurnTrxServlet.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ public class GetBurnTrxServlet extends RateLimiterServlet {
1919
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
2020
try {
2121
long value = manager.getDynamicPropertiesStore().getBurnTrxAmount();
22-
response.getWriter().println("{\"burnTrxAmount\": " + value + "}");
22+
String out = JsonFormat.isInt64AsString()
23+
? "{\"burnTrxAmount\": \"" + value + "\"}"
24+
: "{\"burnTrxAmount\": " + value + "}";
25+
response.getWriter().println(out);
2326
} catch (Exception e) {
2427
logger.error("", e);
2528
try {

framework/src/main/java/org/tron/core/services/http/GetPaginatedProposalListServlet.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
3535
.collect(Collectors.joining(System.lineSeparator()));
3636
Util.checkBodySize(input);
3737
boolean visible = Util.getVisiblePost(input);
38+
// This servlet bypasses PostParams.getPostParams (it parses the body inline), so the
39+
// int64_as_string ThreadLocal must be set here. RateLimiterServlet.service clears it.
40+
JsonFormat.setInt64AsString(Util.getInt64AsStringPost(input));
3841
PaginatedMessage.Builder build = PaginatedMessage.newBuilder();
3942
JsonFormat.merge(input, build, visible);
4043
fillResponse(build.getOffset(), build.getLimit(), visible, response);

framework/src/main/java/org/tron/core/services/http/GetPendingSizeServlet.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ public class GetPendingSizeServlet extends RateLimiterServlet {
1919
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
2020
try {
2121
long value = manager.getPendingSize();
22-
response.getWriter().println("{\"pendingSize\": " + value + "}");
22+
String out = JsonFormat.isInt64AsString()
23+
? "{\"pendingSize\": \"" + value + "\"}"
24+
: "{\"pendingSize\": " + value + "}";
25+
response.getWriter().println(out);
2326
} catch (Exception e) {
2427
logger.error("", e);
2528
try {
Lines changed: 44 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package org.tron.core.services.http;
22

3+
import com.alibaba.fastjson.JSON;
4+
import com.alibaba.fastjson.JSONObject;
35
import java.io.IOException;
46
import javax.servlet.http.HttpServletRequest;
57
import javax.servlet.http.HttpServletResponse;
68
import lombok.extern.slf4j.Slf4j;
9+
import org.apache.commons.lang3.StringUtils;
710
import org.bouncycastle.util.encoders.DecoderException;
811
import org.springframework.beans.factory.annotation.Autowired;
912
import org.springframework.stereotype.Component;
@@ -19,30 +22,53 @@ public class GetRewardServlet extends RateLimiterServlet {
1922

2023
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
2124
try {
22-
long value = 0;
2325
byte[] address = Util.getAddress(request);
24-
if (address != null) {
25-
value = manager.getMortgageService().queryReward(address);
26-
}
27-
response.getWriter().println("{\"reward\": " + value + "}");
26+
renderReward(address, response);
2827
} catch (DecoderException | IllegalArgumentException e) {
29-
try {
30-
response.getWriter()
31-
.println("{\"Error\": " + "\"INVALID address, " + e.getMessage() + "\"}");
32-
} catch (IOException ioe) {
33-
logger.debug("IOException: {}", ioe.getMessage());
34-
}
28+
Util.processAddressError(e, response);
3529
} catch (Exception e) {
36-
logger.error("", e);
37-
try {
38-
response.getWriter().println(Util.printErrorMsg(e));
39-
} catch (IOException ioe) {
40-
logger.debug("IOException: {}", ioe.getMessage());
41-
}
30+
printGenericError(e, response);
4231
}
4332
}
4433

4534
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
46-
doGet(request, response);
35+
String contentType = request.getContentType();
36+
if (contentType == null || !contentType.contains("application/json")) {
37+
doGet(request, response);
38+
return;
39+
}
40+
try {
41+
String body = Util.getRequestValue(request);
42+
JSONObject json = StringUtils.isNotBlank(body) ? JSON.parseObject(body) : null;
43+
String addressStr = (json != null) ? json.getString("address") : null;
44+
// This servlet bypasses PostParams.getPostParams, so set the ThreadLocal explicitly
45+
// from the body. RateLimiterServlet.service clears it in finally.
46+
JsonFormat.setInt64AsString(json != null
47+
&& Boolean.parseBoolean(json.getString(Util.INT64_AS_STRING)));
48+
renderReward(Util.decodeAddress(addressStr), response);
49+
} catch (DecoderException | IllegalArgumentException e) {
50+
Util.processAddressError(e, response);
51+
} catch (Exception e) {
52+
printGenericError(e, response);
53+
}
54+
}
55+
56+
private void renderReward(byte[] address, HttpServletResponse response) throws IOException {
57+
long value = (address != null)
58+
? manager.getMortgageService().queryReward(address)
59+
: 0L;
60+
String out = JsonFormat.isInt64AsString()
61+
? "{\"reward\": \"" + value + "\"}"
62+
: "{\"reward\": " + value + "}";
63+
response.getWriter().println(out);
64+
}
65+
66+
private void printGenericError(Exception e, HttpServletResponse response) {
67+
logger.error("", e);
68+
try {
69+
response.getWriter().println(Util.printErrorMsg(e));
70+
} catch (IOException ioe) {
71+
logger.debug("IOException: {}", ioe.getMessage());
72+
}
4773
}
4874
}

framework/src/main/java/org/tron/core/services/http/GetTransactionCountByBlockNumServlet.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,12 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
3838
}
3939
}
4040

41-
private void fillResponse(long num, HttpServletResponse response) throws IOException {
41+
private void fillResponse(long num, HttpServletResponse response)
42+
throws IOException {
4243
long count = wallet.getTransactionCountByBlockNum(num);
43-
response.getWriter().println("{\"count\": " + count + "}");
44+
String out = JsonFormat.isInt64AsString()
45+
? "{\"count\": \"" + count + "\"}"
46+
: "{\"count\": " + count + "}";
47+
response.getWriter().println(out);
4448
}
4549
}

0 commit comments

Comments
 (0)