访问接口不传必要参数不报错,HTTP状态码为200响应结果为空

本文探讨了在接口设计中,如何正确处理未传递参数的情况,避免调用者误解为成功的响应。通过分析全局异常捕获方法的问题,指出其返回值类型对HTTP响应的影响,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题背景

  在提供接口给别人访问获取数据时,偶然看到他人不传接口指定参数,也能获得HTTP状态码200,只不过响应结果为空。这样显示是不符合逻辑的,调用者会以为调用成功,实则却并没有成功访问。
  经过打断点调试,发现访问请求并没有进入该方法,并且该方法的AOP前置通知也没有进。拉下日志文件分析可看到输出了异常信息,说明进入到了全局异常捕获类,去除全局异常捕获方法,HTTP正常响应400。由此得知,全局异常捕获方法写法有误。

二、异常捕获方法

@ExceptionHandler(Exception.class)
public void handleException(Exception e) {
	logger.error("---------------------- handleException start ---------------------- ");
	logger.error(e.getMessage(), e);
	logger.error("---------------------- handleException end ---------------------- ");
}

三、Controller代码

@GetMapping("/services/business/getInfo")
public String getBusiInfo(@RequestParam String spsxslbm) {
	log.info("信息查询调用参数spsxslbm: {}", spsxslbm);
	ResponseResult responseResult = new ResponseResult();
	if(StringUtils.isNotBlank(spsxslbm)) {
		responseResult.success(hjwsGjmService.getBusiInfo(spsxslbm));
	} else {
		responseResult.fail("调用参数为空,获取数据失败");
	}
	return JSONObject.toJSONString(responseResult);
}

四、不带参数调用

在这里插入图片描述

五、问题解决

  上面分析到问题出现在异常捕获方法上,具体问题其实就是异常捕获方法的返回值 void ,返回 void 其实是代表自己在该方法中处理返回结果并把结果写入 Response 响应中返回。
  这样也能很好的解释为什么不带参数访问响应为空了,因为捕获异常方法中,我并没有做写入 response 的操作。

@ExceptionHandler(Exception.class)
public Object handleException(Exception e) {
	logger.error("---------------------- handleException start ---------------------- ");
	logger.error(e.getMessage(), e);
	logger.error("---------------------- handleException end ---------------------- ");
	return e.getMessage();
}

在这里插入图片描述问:不知道为什么此处返回的404,而不是400?

六、拓展

全局异常捕获处理方法支持的返回值类型有以下:
1、ModelAndView
2、Model
3、Map
4、View
5、String
6、@ResponseBody注解方法,设置响应内容
7、HttpEntity<?> 或者 ResponseEntity<?>:可以设置响应头和响应体内容
8、void:须将响应内容写入 response 中

### 解决 WangEditor 使用 XHR 时出现的状态码 404 错误 当遇到 WangEditor 使用 XHR 请求图片或其他资源时报错状态码为 404 的情况,这通常意味着客户端尝试访问的服务器端路径存在或无法找到指定的服务接口。以下是几种常见的排查方法和解决方案: #### 检查服务端配置 确保服务端已经正确部署并监听相应的 URL 地址。如果使用的是相对路径,则需确认这些路径相对于当前网页的位置是正确的;如果是绝对路径,请验证域名拼写无误以及端口号是否匹配。 #### 验证 API 接口地址 仔细核对用于接收文件的数据处理程序的实际位置与前端代码里设置的目标一致。可以通过浏览器开发者工具中的网络面板查看实际发出请求的具体链接,并同预期对比[^1]。 #### 处理跨域问题 考虑到可能存在同源之间的资源共享(CORS),应检查是否存在此类限制。可以在服务器响应头中加入 `Access-Control-Allow-Origin` 字段允许特定来源访问资源,或者采用 JSONP 方式绕过此约束(注意安全性)。另外一种方式是在 Nginx 或其他反向代理前缀下统一管理 CORS 设置[^2]。 #### 修改wangEditor配置项 对于 wangEditor 来说,在初始化编辑器实例的时候可以自定义上模块的相关参数,比如修改默认超时时长、调整最大并发数等选项来提高成功率。同时也可以利用 error 回调函数捕获异常信息以便进一步分析原因所在。 ```javascript const editor = new Editor({ selector: '#editor', MENU_CONF: { uploadImage: { server: '/your-correct-server-url', // 此处填写正确的API接口地址 fieldName: 'file', customInsert(res, insertFn){ const url = res.data.url; insertFn(url); }, withCredentials: true, headers: {'Authorization': 'Bearer your-token'},// 如果需要携带token认证的话 timeout: 3 * 60 * 1000,// 可选:设置超时时间 maxFileSize: 5 * 1024 * 1024,//可选:单个文件大小限制,默认5M onProgress(progress){}, onSuccess(){}, onError(errMsg){} } } }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值