线上服务器报500内部错误,本地运行正常求排查建议
排查思路:仅服务器环境抛出500 Internal Server Error,本地运行正常
下述代码在本地运行正常,但部署到服务器后调用时抛出500内部服务器错误,请求提供排查思路:
控制器端点代码
@ApiOperation(value = "This API gets info from external service") @PostMapping(value = "/ref-data/info", headers= "Accept=application/json") public ResponseEntity<String> getMasterMaterialInfo(@RequestBody RequestDTO requestDTO) { return service.getInfo(requestDTO); }
服务方法代码
public ResponseEntity<String> getInfo(RequestDTO requestDTO) { HttpEntity<RequestDTO> request = new HttpEntity<>(requestDTO); String requestUrl = refDataUrl+"?apikey="+apikey; return restTemplate.exchange(requestUrl, HttpMethod.POST, request, String.class); }
服务器日志

排查方向
环境配置核对:
- 确认服务器与本地的
refDataUrl、apikey配置完全一致,检查服务器环境的API密钥是否有效、未过期,且外部服务是否允许服务器IP访问 - 在服务器上通过
curl或telnet测试外部服务地址的连通性,排查网络防火墙、代理设置或IP白名单限制
- 确认服务器与本地的
序列化与请求响应校验:
- 检查服务器与本地的JSON序列化组件(如Jackson)版本是否一致,避免因版本差异导致
RequestDTO序列化失败 - 验证外部服务在服务器环境下的响应格式是否符合预期,是否返回了非JSON格式或错误状态码的响应
- 检查服务器与本地的JSON序列化组件(如Jackson)版本是否一致,避免因版本差异导致
RestTemplate配置差异:
- 对比本地与服务器的RestTemplate配置,重点检查超时时间、消息转换器、拦截器设置,服务器可能因超时或转换器不兼容导致请求失败
增强日志排查:
- 在服务方法中添加异常捕获并打印完整错误栈,示例代码:
public ResponseEntity<String> getInfo(RequestDTO requestDTO) { try { HttpEntity<RequestDTO> request = new HttpEntity<>(requestDTO); String requestUrl = refDataUrl+"?apikey="+apikey; return restTemplate.exchange(requestUrl, HttpMethod.POST, request, String.class); } catch (Exception e) { log.error("调用外部服务失败,请求URL:{},请求参数:{}", requestUrl, requestDTO, e); throw new RuntimeException("调用外部服务异常", e); } } - 开启Spring Boot的调试日志,查看更详细的请求、响应及异常信息
- 在服务方法中添加异常捕获并打印完整错误栈,示例代码:
外部服务状态确认:
- 检查外部服务是否对服务器IP有限流、封禁策略,或API调用配额是否耗尽
- 确认外部服务在服务器网络环境下的可用性,是否存在临时故障
内容的提问来源于stack exchange,提问作者user4130072
相关产品推荐
相关产品推荐

