请教一下 ajax 传递字符串数组的问题。不清楚应该属于 js 还是 Java

2018-12-19 17:38:09 +08:00
 ukipoi

我后台有一个接口,其中有一个参数接受 List<string> 的值。
我在测试的时候 PostMan 里 from-data 里传参数 'a','b','c' ,后台可以正常接收。
但是 ajax 请求的时候 var params=['a','b','c']data:{"params":params} 就报 400 错误。
请问这是怎么回事?

ajax 使用的 type 是 json。
试过 traditional:trueJSON.stringify() 这两个方法了,没有效果。
</string>

1589 次点击
所在节点    问与答
9 条回复
wu67
2018-12-19 18:14:08 +08:00
https://i.loli.net/2018/12/19/5c1a19cdb83b8.png
讲道理, 这样传应该没毛病, 大概~
jtwor
2018-12-19 19:28:08 +08:00
get post 问题吧
xavierskip
2018-12-19 19:53:16 +08:00
后台接口有用规范的 json 吗?
finian
2018-12-19 20:04:33 +08:00
传的格式不对呗。截下 Postman 的图和你的 ajax 代码。
fmumu
2018-12-19 20:28:59 +08:00
contentType:"application/json"
ukipoi
2018-12-20 10:16:30 +08:00
@finian
好像在 ajax 里注释掉了 ```//processData: false``` 就可以用 ```JSON.stringify() ``` 来正常访问接口了。
不过我在 postman 里用 row 格式还是 400 错误。
![avatar]( https://i.loli.net/2018/12/20/5c1afb2f7925f.png)
![avatar]( https://i.loli.net/2018/12/20/5c1afb2f94bbf.png)
finian
2018-12-20 17:31:14 +08:00
@ukipoi #6 先问清楚你们后端接口接受什么样的 post 数据格式吧,看你的截图,你的服务端好像只接受 `multipart/form-data` 的请求数据格式,但你又提到使用 ajax application/json 可以正常访问接口,说明服务端是接受 `application/json` 格式的
ukipoi
2018-12-20 17:37:54 +08:00
@finian
不好意思,其实我是写这个后台借口的。
格式的话我没有做限定,只是声明了 @PostMapping
参数部分是做了 @RequestParam("") List<String> imgs 这样子而已
finian
2018-12-20 18:32:10 +08:00
@ukipoi #8 两种方式:
1. 后端使用 `application/json` 格式,参数用 `@RequestBody` 映射

```
@PostMapping(
consumes = MediaType.APPLICATION_JSON_VALUE
produces = MediaType.APPLICATION_JSON_VALUE
)
public Response blahahah(@RequestBody YourJsonPayloadObject yourJsonPayloadObject) {
...
}
```

前端:

```
$.ajax({
url: '...',
method: 'POST',
contentType: 'application/json',
dataType: 'json',
processData: false,
data: JSON.stringify({
imgs: ['IMGURL1', 'IMGURL2'],
...
}),
})
```

2. 使用 `application/x-www-form-urlencoded` post 数据

如果使用 `traditional: true`

```
$.ajax({
url: '...',
method: 'POST',
traditional: true,
data: {
imgs: ['IMGURL1', 'IMGURL2'],
...
},
})
```

会产生这样的 payload: `imgs=IMGURL1&imgs=IMGURL2`,后端不用改

如果使用 `traditional: false`(默认)

```
$.ajax({
url: '...',
method: 'POST',
data: {
imgs: ['IMGURL1', 'IMGURL2'],
...
},
})
```

会产生这样的 payload: `imgs[]=IMGURL1&imgs[]=IMGURL2`,
后端的 `@RequestParam("")` 要改为 `@RequestParam("imgs[]")`

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/519057

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX