Java Spring/Angular 7 POST方法requestparameter为空

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

我想使用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);
}); 
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,但参数仍然为空)
我想使用“getParameter”而不是@RequestBody注释

如何从前端获取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),现在它开始工作了,谢谢你。