Skip to content

Commit bb006e0

Browse files
committed
代理接口:解决 /delegate 请求某些报错不返回实际 Resopnse Body/HTTP Status Code;优化代码
1 parent 0dabd7b commit bb006e0

File tree

1 file changed

+55
-73
lines changed

1 file changed

+55
-73
lines changed

APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/boot/DemoController.java

Lines changed: 55 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1408,49 +1408,9 @@ else if (names != null) {
14081408

14091409
String rspBody = null;
14101410
if (recordType >= 0) {
1411-
try {
1412-
RestTemplate client = new RestTemplate();
1413-
// 请勿轻易改变此提交方式,大部分的情况下,提交方式都是表单提交
1414-
HttpEntity<String> requestEntity = new HttpEntity<>(method == HttpMethod.GET ? null : body, headers);
1415-
// 执行HTTP请求,这里可能抛异常,不要包装,直接让它抛,能够在浏览器 Console/XHR/{i}/Preview
1416-
// 看到 error: "Internal Server Error" message: "405 null" 之类的包括信息,
1417-
// 包装后反而容易混淆,并且会因为 JSON 结构不一致导致解析问题
1418-
ResponseEntity<String> entity = client.exchange(url, method, requestEntity, String.class);
1419-
1420-
HttpHeaders hhs = entity.getHeaders();
1421-
if (session != null && hhs != null) {
1422-
List<String> cookie = hhs.get(SET_COOKIE);
1423-
if (cookie != null && cookie.isEmpty() == false) {
1424-
session.setAttribute(COOKIE, cookie);
1425-
}
1426-
}
1427-
1428-
HttpStatus status = entity.getStatusCode();
1429-
httpServletResponse.setStatus(status.value(), status.getReasonPhrase());
1430-
rspBody = entity.getBody();
1431-
}
1432-
catch (Throwable e) {
1433-
try {
1434-
if (e instanceof RestClientResponseException) {
1435-
RestClientResponseException hce = (RestClientResponseException) e;
1436-
String msg = hce.getStatusText();
1437-
httpServletResponse.sendError(hce.getRawStatusCode(), StringUtil.isEmpty(msg, true) ? e.getMessage() : msg);
1438-
} else {
1439-
int code = CommonException.getCode(e);
1440-
httpServletResponse.sendError(code, e.getMessage());
1441-
}
1442-
}
1443-
catch (Throwable ex) {
1444-
// httpServletResponse.setStatus(500, e.getMessage());
1445-
throw e;
1446-
}
1447-
}
1448-
1449-
SESSION_MAP.put(session.getId(), session);
1450-
httpServletResponse.setHeader(APIJSON_DELEGATE_ID, session.getId());
1411+
rspBody = sendRequest(session, method, url, body, headers);
14511412
}
14521413

1453-
14541414
if (recordType != 0) {
14551415
try {
14561416
boolean isBodyEmpty = StringUtil.isEmpty(body, true);
@@ -1755,43 +1715,65 @@ else if (recordType > 0) {
17551715
}
17561716

17571717
if (recordType < 0) {
1758-
try {
1759-
RestTemplate client = new RestTemplate();
1760-
HttpEntity<String> requestEntity = new HttpEntity<>(method == HttpMethod.GET ? null : body, headers);
1761-
ResponseEntity<String> entity = client.exchange(url, method, requestEntity, String.class);
1762-
1763-
HttpHeaders hhs = entity.getHeaders();
1764-
if (session != null && hhs != null) {
1765-
List<String> cookie = hhs.get(SET_COOKIE);
1766-
if (cookie != null && cookie.isEmpty() == false) {
1767-
session.setAttribute(COOKIE, cookie);
1768-
}
1769-
}
1718+
rspBody = sendRequest(session, method, url, body, headers);
1719+
}
17701720

1771-
HttpStatus status = entity.getStatusCode();
1772-
httpServletResponse.setStatus(status.value(), status.getReasonPhrase());
1773-
rspBody = entity.getBody();
1774-
}
1775-
catch (Throwable e) {
1776-
try {
1777-
if (e instanceof RestClientResponseException) {
1778-
RestClientResponseException hce = (RestClientResponseException) e;
1779-
String msg = hce.getStatusText();
1780-
httpServletResponse.sendError(hce.getRawStatusCode(), StringUtil.isEmpty(msg, true) ? e.getMessage() : msg);
1781-
} else {
1782-
int code = CommonException.getCode(e);
1783-
httpServletResponse.sendError(code, e.getMessage());
1784-
}
1785-
}
1786-
catch (Throwable ex) {
1787-
// httpServletResponse.setStatus(500, e.getMessage());
1788-
throw e;
1721+
return rspBody;
1722+
}
1723+
1724+
protected String sendRequest(HttpSession session, HttpMethod method, String url, String body, HttpHeaders headers) {
1725+
String rspBody = null;
1726+
try {
1727+
RestTemplate client = new RestTemplate();
1728+
HttpEntity<String> requestEntity = new HttpEntity<>(method == HttpMethod.GET ? null : body, headers);
1729+
ResponseEntity<String> entity = client.exchange(url, method, requestEntity, String.class);
1730+
1731+
HttpHeaders hhs = entity.getHeaders();
1732+
if (session != null && hhs != null) {
1733+
List<String> cookie = hhs.get(SET_COOKIE);
1734+
if (cookie != null && cookie.isEmpty() == false) {
1735+
session.setAttribute(COOKIE, cookie);
17891736
}
17901737
}
17911738

1792-
SESSION_MAP.put(session.getId(), session);
1793-
httpServletResponse.setHeader(APIJSON_DELEGATE_ID, session.getId());
1739+
// FIXME 部分请求头导致 Response Body 未返回前端
1740+
// Set<Entry<String, List<String>>> set = hhs.entrySet();
1741+
// for (Entry<String, List<String>> e : set) {
1742+
// String key = e == null ? null : e.getKey();
1743+
// if (key != null) {
1744+
// List<String> value = e.getValue();
1745+
// httpServletResponse.setHeader(key, null);
1746+
// for (String v : value) {
1747+
// httpServletResponse.addHeader(key, v);
1748+
// }
1749+
// }
1750+
// }
1751+
1752+
HttpStatus status = entity.getStatusCode();
1753+
httpServletResponse.setStatus(status.value(), status.getReasonPhrase());
1754+
rspBody = entity.getBody();
17941755
}
1756+
catch (Throwable e) {
1757+
try {
1758+
if (e instanceof RestClientResponseException) {
1759+
RestClientResponseException hce = (RestClientResponseException) e;
1760+
String msg = hce.getStatusText();
1761+
rspBody = hce.getResponseBodyAsString();
1762+
httpServletResponse.setStatus(hce.getRawStatusCode(), StringUtil.isEmpty(msg, true) ? e.getMessage() : msg);
1763+
} else {
1764+
int code = CommonException.getCode(e);
1765+
httpServletResponse.setStatus(code, e.getMessage());
1766+
}
1767+
}
1768+
catch (Throwable ex) {
1769+
int code = CommonException.getCode(e);
1770+
httpServletResponse.setStatus(code, e.getMessage());
1771+
// throw e;
1772+
}
1773+
}
1774+
1775+
SESSION_MAP.put(session.getId(), session);
1776+
httpServletResponse.setHeader(APIJSON_DELEGATE_ID, session.getId());
17951777

17961778
return rspBody;
17971779
}

0 commit comments

Comments
 (0)