如何在 spring 引导中处理 angular 对 JSON 对象的放置请求?
how to handle angular's put request of JSON object in spring boot?
我正在尝试模拟在 this you tube video. Here he uses this 中用作后端的环境,以从 angular 前端存储和检索数据。
我想做同样的事情,使用 spring 引导作为我的支持,并从前端进行休息调用 (Angular)。
我正在成功获取 GET 请求输出。但无法处理 PUT 请求。
我想向服务器发送一个 JSON 对象,服务器应该使用它来执行某些操作。
客户端
我的 Angular 代码 放置 JSON 对象如下所示:
服务
updateTodo(todo:Todo):Observable<boolean>{
return this.http.put<boolean>('http://localhost:8080/udateJsonData',todo,httpOptions);
}
我的 todo 变量的 class 定义在上面的 put 请求中是:
型号
export class Todo{
id:number;
title:string;
completed:boolean;
}
HTTP 选项
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
}
后端
并在服务器端spring启动。我有一个 rest 调用映射方法,如下所示:
RequestBody(模型)
@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本身就是null。
如有任何帮助,我们将不胜感激。
谢谢。
我认为您应该在 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;
}
使用@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;
}
You could actually use @PutMapping
@PutMapping(value = "udateJsonData", consumes = MediaType.APPLICATION_JSON_VALUE)
public boolean udateJsonData(@RequestBody RequestBody requestBody) {
System.out.println(requestBody.title);
return false;
}
我正在尝试模拟在 this you tube video. Here he uses this 中用作后端的环境,以从 angular 前端存储和检索数据。
我想做同样的事情,使用 spring 引导作为我的支持,并从前端进行休息调用 (Angular)。
我正在成功获取 GET 请求输出。但无法处理 PUT 请求。
我想向服务器发送一个 JSON 对象,服务器应该使用它来执行某些操作。
客户端
我的 Angular 代码 放置 JSON 对象如下所示:
服务
updateTodo(todo:Todo):Observable<boolean>{
return this.http.put<boolean>('http://localhost:8080/udateJsonData',todo,httpOptions);
}
我的 todo 变量的 class 定义在上面的 put 请求中是:
型号
export class Todo{
id:number;
title:string;
completed:boolean;
}
HTTP 选项
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
}
后端
并在服务器端spring启动。我有一个 rest 调用映射方法,如下所示:
RequestBody(模型)
@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本身就是null。
如有任何帮助,我们将不胜感激。 谢谢。
我认为您应该在 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;
}
使用@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;
}
You could actually use @PutMapping
@PutMapping(value = "udateJsonData", consumes = MediaType.APPLICATION_JSON_VALUE)
public boolean udateJsonData(@RequestBody RequestBody requestBody) {
System.out.println(requestBody.title);
return false;
}