从请求对象Header中获取OTP,请问以下代码实现是否正确
代码问题诊断
这段代码存在多处明确的语法错误和逻辑错误,完全无法正常运行,具体问题如下:
- 参数错误:
request.getHeader(otp)中传入的otp是未声明的变量,会直接触发编译错误。从请求头取值需要传入请求头对应的字符串键名,正确写法为request.getHeader("otp")(注意键名大小写要和前端传入的请求头名一致,若前端传的是大写OTP则对应修改为"OTP")。 - 逻辑完全错误:当前你把支付校验的业务代码写在了
if(otp == null)的分支里,且该分支第一行就执行了return返回错误响应,后面的校验代码完全是不可达代码,永远不会被执行。正确逻辑应该是OTP为空时返回错误提示,OTP不为空时才走支付校验流程。 - 语法结构错误:当前代码的大括号配对完全混乱,if语句块没有闭合,try块的闭合大括号位置错误,直接导致try和catch无法配对,属于基础语法错误,编译无法通过。
修正后参考代码
public ResponseEntity<?> validatePayment(@PathVariable String paymentService, @PathVariable String invoicenumber, HttpServletRequest request) { try { // 注意请求头键名要和前端传入的大小写保持一致 String otp = request.getHeader("otp"); if(otp == null) { // 若属于缺少必要请求参数的场景,语义上更推荐用HttpStatus.BAD_REQUEST(400),也可按需保留原有FORBIDDEN return ResponseEntityMapper.toResponseEntity("Please enter OTP" ,HttpStatus.FORBIDDEN); } // OTP非空时才执行支付校验逻辑 Payments response = paymentsServices.validatePayment(paymentService, invoicenumber, otp); return ResponseEntityMapper.toResponseEntity(response, HttpStatus.OK); } catch (Exception e) { e.printStackTrace(); return ResponseEntityMapper.toResponseEntity(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } }
内容的提问来源于stack exchange,提问作者DHANANJAY RAGHAV
相关产品推荐
相关产品推荐

