为什么在 post 中发送多个参数时会出现 400 错误? Angular + Spring 开机
Why do I get a 400 error when sending multiple parameters in post? Angular + Spring Boot
我正在从 angular 向我的 restcontroller 发送一个本地日期时间和一个数字。这是我唯一遇到错误的地方,无论我做什么。我记录了变量值,以防它们的格式错误。本地日期时间采用 yyyy-MM-ddThh:mm 格式。我的 angular 方法调用:
updateDogFeeding(dogid,data)
{
return this.http.post(environment.rooturl + "/api/profile/animals/feeddog",{dogid,data},{observe:'response', withCredentials:true,
headers: new HttpHeaders({'Content-Type':'application/json'})})
}
我尝试在 HttpParams 中发送数组中的参数,或使用 JSON.stringify() 的元素数组,但没有任何效果。我检查了来自 spring 的错误消息,得到了这个:
无法解析 public com.example.vizsga_kedvenc_felugyelo.model.Dog com.example.vizsga_kedvenc_felugyelo.controll.DogController.feedDog(java.lang.Integer,java.time.LocalDateTime) 中的参数 [0]: JSON 解析错误:无法从对象值(令牌 JsonToken.START_OBJECT
)反序列化类型 java.lang.Integer
的值;嵌套异常是 com.fasterxml.jackson.databind.exc.MismatchedInputException:无法从对象值(标记 JsonToken.START_OBJECT
)中反序列化类型 java.lang.Integer
的值
在 [来源: (org.springframework.util.StreamUtils$NonClosingInputStream);行:1,列:1]
可能的原因是什么?
我的休息控制器:
@PostMapping(value = "api/profile/animals/feeddog")
public Dog feedDog(@RequestBody Integer dogID, @RequestBody LocalDateTime timestamp)
{
System.out.println("Got called"); //Isn't printed on the console
return dogService.feedDog(dogID,timestamp);
}
您正在使用两个响应正文。应该是一个。
当您从 Angular 发送请求时,请求正在创建一个带有 JSON 的正文,如下所示:
{
"dogid": X,
"data": Y
}
这是一个对象,但只有一个。
所以你的控制器方法应该有一个对象作为请求体的参数,具有相同的结构。
编辑:您还可以使用 Map<> 类型的对象来保存值。
我正在从 angular 向我的 restcontroller 发送一个本地日期时间和一个数字。这是我唯一遇到错误的地方,无论我做什么。我记录了变量值,以防它们的格式错误。本地日期时间采用 yyyy-MM-ddThh:mm 格式。我的 angular 方法调用:
updateDogFeeding(dogid,data)
{
return this.http.post(environment.rooturl + "/api/profile/animals/feeddog",{dogid,data},{observe:'response', withCredentials:true,
headers: new HttpHeaders({'Content-Type':'application/json'})})
}
我尝试在 HttpParams 中发送数组中的参数,或使用 JSON.stringify() 的元素数组,但没有任何效果。我检查了来自 spring 的错误消息,得到了这个:
无法解析 public com.example.vizsga_kedvenc_felugyelo.model.Dog com.example.vizsga_kedvenc_felugyelo.controll.DogController.feedDog(java.lang.Integer,java.time.LocalDateTime) 中的参数 [0]: JSON 解析错误:无法从对象值(令牌 JsonToken.START_OBJECT
)反序列化类型 java.lang.Integer
的值;嵌套异常是 com.fasterxml.jackson.databind.exc.MismatchedInputException:无法从对象值(标记 JsonToken.START_OBJECT
)中反序列化类型 java.lang.Integer
的值
在 [来源: (org.springframework.util.StreamUtils$NonClosingInputStream);行:1,列:1]
可能的原因是什么?
我的休息控制器:
@PostMapping(value = "api/profile/animals/feeddog")
public Dog feedDog(@RequestBody Integer dogID, @RequestBody LocalDateTime timestamp)
{
System.out.println("Got called"); //Isn't printed on the console
return dogService.feedDog(dogID,timestamp);
}
您正在使用两个响应正文。应该是一个。
当您从 Angular 发送请求时,请求正在创建一个带有 JSON 的正文,如下所示:
{
"dogid": X,
"data": Y
}
这是一个对象,但只有一个。 所以你的控制器方法应该有一个对象作为请求体的参数,具有相同的结构。
编辑:您还可以使用 Map<> 类型的对象来保存值。