对方(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);
}
}
}
对方的http request报文呢
正则没问题的话那就是有一个人说谎了,程序是死的,人是活的。
有空格?
把他传的参数原封不动的写到日志看看
提示错误
的时候,报错是验证的正常返回报错还是系统方面的报错,这个确认下会不会是数据未解密就进入了验证器
1 是否收到参数? 2 撤掉正则是否运行正常?
original_amount传297试试看那,这两个的验证方法是一样的,如果两个字段都不行并且按你说的postman测试没有问题的话,就是java参数的问题了。
传的279字符串?
这个我遇到过,使用统一字符,例如都用utf-8
和java对接建议你加上数据类型强校验,可能有不一样的结果,去掉正则校验,加上数据类型强校验看看结果
有原始的请求报文,建议 debug,一定可以找到答案
目前依据你描述的问题,暂时无法在本地构建完整的环境。可以更清晰的描述下现象、你的环境和应用:
request 接参数就进入了验证器了
在接参数的时候别依赖注入OrderGenerateOrderRequest