我正在尝试模拟this您使用视频的环境。在这里,他使用this作为后端来存储和检索有角前端的数据。
我想使用Spring Boot做与我支持的事情相同的事情,并从前端(Angular)进行休息呼叫。
我已成功获取GET请求输出。但无法处理PUT请求。
我想将JSON对象发送到服务器,服务器应该使用它执行一些操作。
我的 Angular代码用于放置JSON对象,如下所示:
updateTodo(todo:Todo):Observable<boolean>{
return this.http.put<boolean>('http://localhost:8080/udateJsonData',todo,httpOptions);
}
在上述put请求中的我的 todo 变量的类定义是:
export class Todo{
id:number;
title:string;
completed:boolean;
}
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
}
在服务器端的 spring boot 中。我有一个rest call映射方法,如下所示:
@XmlRootElement
public class RequestBody {
@JsonProperty int id;
@JsonProperty String title;
@JsonProperty boolean completed;
}
@RequestMapping(value = "/udateJsonData", method = RequestMethod.PUT)
@Consumes(MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody boolean udateJsonData(RequestBody requestBody) {
System.out.println(requestBody.title);
return false;
}
问题是我将系统权限设置为 null 。
我尝试调试,发现我的 requestBody 本身为空。
任何帮助将不胜感激。 谢谢。
答案 0 :(得分:1)
我认为您应该在Java中创建一种POJO对象(例如TodoDTO
),该对象具有与Angular中相同的结构和类型。
然后您在put方法参数中使用了@RequestBody
注释:
@RequestMapping(value = "/udateJsonData", method = RequestMethod.PUT)
@Consumes(MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody boolean udateJsonData(@RequestBody TodoDTO todo) {
System.out.println(todo.title);
return false;
}
答案 1 :(得分:0)
使用@RequestBody
批注获取数据
@RequestMapping(value = "/udateJsonData", method = RequestMethod.PUT)
@Consumes(MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody boolean udateJsonData(@RequestBody RequestBody requestBody) {
System.out.println(requestBody.title);
return false;
}
您实际上可以使用 @PutMapping
@PutMapping(value = "udateJsonData", consumes = MediaType.APPLICATION_JSON_VALUE)
public boolean udateJsonData(@RequestBody RequestBody requestBody) {
System.out.println(requestBody.title);
return false;
}