Java Spring/Angular 7 POST方法requestparameter为空
我想使用POST将数据(json格式)从前端发送到后端,但requestparameter为null 角度:Java Spring/Angular 7 POST方法requestparameter为空,java,json,angular,spring,spring-boot,Java,Json,Angular,Spring,Spring Boot,我想使用POST将数据(json格式)从前端发送到后端,但requestparameter为null 角度: this.http.post('api/example', { mydata: JSON.stringify(data) }, { "headers": { header: "text/html;charset=UTF-8" } }).subscribe(Response => console.log(Response); }); st
this.http.post('api/example', { mydata: JSON.stringify(data) },
{ "headers": { header: "text/html;charset=UTF-8" } }).subscribe(Response => console.log(Response);
});
stringify(数据)如下所示:
[
["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,但参数仍然为空)
最初我不想使用@RequestBody,但如果我想使用它,我如何使用它来获取这些json数组?您需要使用.getReader()而不是.getParameter()方法,因为您需要检索请求的主体而不是某个参数。您需要使用.getReader()而不是.getParameter()方法,因为您需要检索请求的主体,而不是一些参数。要使用@RequestBody,您需要一个与JSON匹配的Java数据结构, e、 g.嵌套数组
@PostMapping(path="/api/example")
public void postExample(@RequestBody ArrayList<ArrayList<String>> body) {
//....
}
要使用@RequestBody,您需要一个与JSON匹配的Java数据结构, e、 g.嵌套数组
@PostMapping(path="/api/example")
public void postExample(@RequestBody ArrayList<ArrayList<String>> body) {
//....
}
问题在于
mydata
不是请求参数,而是请求主体。最简单的方法是使用@RequestBody
,但如果您不喜欢,则必须使用以下方法之一:谢谢。如果我想使用@RequestBody,在这种情况下,我如何使用它?(正如您所见,我有多个数组)您必须将JSON模式建模为带有列表的Java对象,正如Marc所说:问题在于mydata
不是请求参数,而是请求主体。最简单的方法是使用@RequestBody
,但如果您不喜欢,则必须使用以下方法之一:谢谢。如果我想使用@RequestBody,在这种情况下,我如何使用它?(正如您所见,我有多个数组)您必须将JSON模式建模为带有列表的Java对象,正如Marc所说:我尝试了这个方法,但发现了一个问题,当我以angular打印JSON.stringify(data)
时,我们可以看到正确的JSON(见上文),但当我使用@RequestBody String mydata
时,然后我会得到这个:{“mydata”:“[[\'num1\',\'num2\',\'num3\',\'num4\',\'num5\',\'num6\'],[\'test6\',\'test2\',\'test1\',\'test5\',\'test4\',\'test3\']]”
之后,如果我将字符串更改为ArrayList,我将得到解析JSON错误:无法反序列化java.util.ArrayList的实例,超出了启动标记代码>错误。如果我是正确的,那么我应该使用简单的字符串并自己解析所有内容?不,然后使用pojo:public class Dto{@JsonProperty(“mydata”)public ArrayList mydata;}
我在编写时尝试过+我必须将this.http.post('api/example',{mydata:JSON.stringify(data)}
更改为this.http.post('api/example',{mydata:data}
(删除了JSON.stringify),现在它可以工作了,谢谢。我试过了,但发现了一个问题,当我用angular打印出JSON.stringify(data)
时,我们可以看到正确的JSON(见上文),但是当我使用@RequestBody String mydata
时,我会得到这个:{“mydata”:“[\”num1\“,”num2\“,”num3\“,”num4\“,”num5\“,”num6\“],[”测试6\“,”测试2\“,”测试1\“,”测试5\“,”测试4\“,”测试3\“]]”
之后,如果我将字符串更改为ArrayList,我将得到JSON解析错误:无法从START_对象标记中反序列化java.util.ArrayList的实例;
错误。如果我是正确的,那么我应该使用简单的字符串并自己解析所有内容?不,然后使用pojo:公共类Dto{@JsonProperty(“mydata”)public ArrayList myData;}
我试着像你写的那样+我不得不把这个.http.post('api/example',{myData:JSON.stringify(data)}
改成这个.http.post('api/example',{myData:data}
(删除了JSON.stringify),现在它开始工作了,谢谢你。