[SpringBoot] 在Controller中使用java对象接受前端传来的json数据

5,279 阅读1分钟

对于后端接口,可以添加@RequestBody注解,也可以不添加。

不添加注解的好处是可以同时接受参数及文件,具体详见 使用Postman测试SpringBoot接口,同时传文件和参数

添加@RequestBody注解

后端

首先第一步,需要添加 @RequestBody 注解。代码如下,可能有小伙伴找不到,@RequestBody是放在方法参数中的。

@RequestMapping("/upload")
@ResponseBody
public String upload(@RequestBody Job job) {
    System.out.println(job);
    return "Success";
}

添加了这个注解后,后端就可以接收到前端传来的json数据了。

前端

但需要注意的是:

Postman

如果是在Postman中进行测试,需要将json数据写在Body中,且设置类型为Json,而不是将参数放在Params中,如图:

JavaScript

同理,如果是JS的代码,则需要在ajax中设置数据类型为JSON。

不添加@RequestBody注解

后端

如果不添加注解,则后端代码如下,其实就只是把注解删了,其他地方都没变:

@RequestMapping("/upload")
@ResponseBody
public String upload(Job job) {
    System.out.println(job);
    return "Success";
}

Postman的一些设置

如果不添加注解,则使用Body中的form-data进行参数设置,如下图。

通过form-data设置参数的好处是,可以同时传文件。

实体类中Get Set方法的添加

到这一步,可能有的小伙伴还是说,接受到的对象中的数据为null,就像下面的代码一下。

Job{id=0, introduction='null', status='null', dataSetId=0}

这是因为SpringBoot依赖于get set函数做映射。

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

为实体类添加get set函数后,接受前端json数据的工作就完成了。

Job{id=0, introduction='test', status='22', dataSetId=0}