对方(java)来调用我的接口,验证器的一个正则验证就是不通过!

对方传给我一个297,这条正则就是不通过

/^(([1-9]{1}\d*)|(0{1}))(\.\d{1,2})?$/

由于数据时加密后传输的,我把他的加密串拿过来自己发送也没问题,但是他传297就是提示错误,297.01也没问题!有人能想到是什么原因导致的吗?其他验证都没有问题!

//多余的代码我尽量都删除了
class OrderGenerateOrderRequest extends FormRequest
{
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'user_id' => ['required', 'string'],
            'gas_id' => ['required', 'string'],
            'original_amount' => [
                'required', 
                'regex:/^(([1-9]{1}\d*)|(0{1}))(\.\d{1,2})?$/'
            ],
            'payment_amount' => [
                'required', 
                //就是这个正则,他传给我297.01没有问题,但是传297他通不过,但是我这边测试没有任何问题(postman和apipost都测试过)
                'regex:/^(([1-9]{1}\d*)|(0{1}))(\.\d{1,2})?$/'
            ],
        ];
    }

    public function withValidator($validator)
    {
        if ($validator->fails()) {
            $keys = $validator->errors()->keys();
            switch ($keys[0]) {
                case 'original_amount':
                    throw new ValidatorException('original_amount参数错误', 3004);
                case 'payment_amount':
                    throw new ValidatorException('payment_amount参数错误', 3005);
                case 'service_fee':
                    throw new ValidatorException('service_fee参数错误', 5000);
                case 'litre':
                    throw new ValidatorException('litre参数错误', 5000);
        }
    }
}
让PHP再次伟大
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 29

对方的http request报文呢

1年前 评论
勇敢的心 (楼主) 1年前
翟宇鑫

正则没问题的话那就是有一个人说谎了,程序是死的,人是活的。

1年前 评论

有空格?

1年前 评论
勇敢的心 (楼主) 1年前

把他传的参数原封不动的写到日志看看

1年前 评论

提示错误 的时候,报错是验证的正常返回报错还是系统方面的报错,这个确认下

1年前 评论

会不会是数据未解密就进入了验证器

1年前 评论
勇敢的心 (楼主) 1年前
看上隔壁小花了啦 (作者) 1年前
勇敢的心 (楼主) 1年前
看上隔壁小花了啦 (作者) 1年前
勇敢的心 (楼主) 1年前
看上隔壁小花了啦 (作者) 1年前
勇敢的心 (楼主) 1年前
看上隔壁小花了啦 (作者) 1年前

1 是否收到参数? 2 撤掉正则是否运行正常?

1年前 评论
勇敢的心 (楼主) 1年前
美国总统 (作者) 1年前

original_amount传297试试看那,这两个的验证方法是一样的,如果两个字段都不行并且按你说的postman测试没有问题的话,就是java参数的问题了。

1年前 评论
勇敢的心 (楼主) 1年前
win27149 (作者) 1年前

传的279字符串?

1年前 评论
勇敢的心 (楼主) 1年前

这个我遇到过,使用统一字符,例如都用utf-8

1年前 评论

和java对接建议你加上数据类型强校验,可能有不一样的结果,去掉正则校验,加上数据类型强校验看看结果

1年前 评论
atlanticfeng

有原始的请求报文,建议 debug,一定可以找到答案

目前依据你描述的问题,暂时无法在本地构建完整的环境。可以更清晰的描述下现象、你的环境和应用:

  1. php 版本
  2. laravel 版本
  3. composer 依赖
  4. 请求、响应报文(curl 比较全面)
  5. http 服务环境(fpm / 其他)
  6. 你期望的响应结果和目前的响应结果
  7. 路由(是否有其他中间件)和验证器代码
1年前 评论

request 接参数就进入了验证器了

1年前 评论

在接参数的时候别依赖注入OrderGenerateOrderRequest

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!