【发布时间】:2020-12-14 23:15:29
【问题描述】:
我想使用 POST 从前端向后端发送数据(以 json 形式),但请求参数为空。
角度:
this.http.post('api/example', { mydata: JSON.stringify(data) },
{ "headers": { header: "text/html;charset=UTF-8" } }).subscribe(Response => console.log(Response);
});
JSON.stringify(data) 看起来像这样:
[
["num1","num2","num3","num4","num5", "num6"],
["test6","test2","test1","test5","test4", "test3"]
]
这只是一个例子,数据是动态的,所以有时我会有更多或更少的列和行。
Spring 后端:
@RequestMapping(value = "/api/example", method = RequestMethod.POST)
public @ResponseBody void postExample(HttpServletRequest request, HttpServletResponse response)
throws IOException {
HttpSession session = request.getSession();
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
String mydata = request.getParameter("mydata");
System.out.println(mydata);
...
}
当我打印出来时,mydata 为空。我不知道为什么。 我尝试了什么:
- 将“text/html”更改为“application/json”和“application/*”和“text/plain”(并希望在后端将文本转换为 json,但仍为空参数)
我想使用“getParameter”而不是使用@RequestBody 注释。
如何从前端获取 json 数据并在后端使用?
编辑: 本来我并不想用@RequestBody,但是如果我想用它,我怎么用它来获取这些json数组呢?
【问题讨论】:
-
问题是
mydata不是请求参数,而是请求体。最简单的方法是使用@RequestBody,但如果您不喜欢它,则必须使用以下方法之一:stackoverflow.com/questions/8100634/… -
谢谢。如果我想使用@RequestBody,在这种情况下我该如何使用它? (因为如你所见,我有多个数组)
-
您必须将 JSON 模式建模为带有列表的 Java 对象,正如 Marc 所说:stackoverflow.com/a/63595324/2470255
标签: java json angular spring spring-boot