前端传递数据给后端出现这样一个问题,求一个全栈开发者回答

hmy666
  • 100

前端传递这样一个数据对象的时候:
image.png
后端接受到我的字段,比如sxh这个字段,它是数字类型的吗?还是传递过程中,会把所有信息都转为字符串,后端需要自己利用工具解析成自己需要的类型。

我发现我传递number类型的时候,后端老说它接收到的是string类型,这个是后端的锅还是我的责任?
image.png
请求文件:
image.png
image.png

回复
阅读 1.5k
2 个回答
NickWang
  • 1.1k
✓ 已被采纳

你可以用浏览器自带的fetch调试一下,但是通常来说GET请求是不发送body。
头信息有两个点
Accept: application/json
Content-Type: application/json;charset=UTF-8
这会影响后端的处理。
另外发送JSON而不是JSON字符串给后端。
从你描述的情况来看,前后可能都有问题,一起调吧。别牵扯业务,就随便定一个api,传送并接受一个包含字符串、整数、浮点数、时间戳、日期字符串、布尔的数据,测过了就好了。

@边城 咱两个可能想多了,楼主也想多了。
你们前后端沟通出问题了吧?注意你提交的数据是

sxh: {sxh: 1}

后端报的错误是第一个sxh引发的吧

边城
  • 55k

首先,JSON 本身是可以区分数值和字符串的,比如

{
    "stringValue": "2",
    "numberValue": 2
}

但是要注意,JSON 本身是文本,也就是字符串,后端拿到这个东西之后需要解析。当然一般都会有现成的解析组件,比如

  • System.Text.Json (C#)
  • Newtonsoft Json.Net (C#)
  • Gson (Java)
  • Jackson (Java)
  • ...

现成的组件在解析的时候一般都会准确的识别类型。但是如果是直接按照模型结构进行转换(也就是反序列化),而模型里又是定义成 String 的时候,组件通常会进行容错处理,按照实际模型中定义的类型的转换,就可能把 2 变成 "2"(比如强类型语言,类型不匹配是不能赋值的)

另外一种情况就是自己写的 JSON 解析工具了,这种情况的行为……自己控制。

所以,如果你给的 JSON 确实是数值,但后端拿到的是字符串,那就请后端查查模型定义吧。


补一下,从截图来看,这里有两个 sxh,JSON 源码大概应该是这样

{ "sxh": { "sxh": 1} }

这样解析第 2 个 sxh 的时候应该是 number 类型,但是第 1 个应该是个对象,如果想把它解析给数值类型,不知道会报什么错。

另外,从错误信息那个截图来看,确实是想把字符串解析给后端 int 类型报的错。

还是联合调试一下看问题出在哪里吧,也有可能不是前、后哪一端的问题,而是数据协议处理上的问题。


再补

刚才在 DotnetFiddle 上去试了一下,应该就是后端解析层次的问题,从下面的链接过去看,两个反序列化,一个正常,一个报错,而且报的就是那个错。

https://dotnetfiddle.net/M7Fcvb

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进