前端传来的数据,有level,content,child,index四个属性,是分级别的,数组里嵌套多个对象,对象的child属性有嵌套多个数组,以此类推,后端springboot框架怎么接收,然后按级别存储到数据库中,请用代码实现增删查操作
时间: 2023-10-07 15:14:24 浏览: 44
假设前端传来的数据格式如下:
```json
[
{
"level": 1,
"content": "Level 1 Content",
"child": [
{
"level": 2,
"content": "Level 2 Content",
"child": [
{
"level": 3,
"content": "Level 3 Content",
"child": []
}
]
}
]
},
{
"level": 1,
"content": "Level 1 Content 2",
"child": []
}
]
```
接收数据的后端代码可以如下:
```java
@RestController
@RequestMapping("/data")
public class DataController {
@Autowired
private DataRepository dataRepository;
@PostMapping
public void saveData(@RequestBody List<Data> dataList) {
for (Data data : dataList) {
save(data);
}
}
@DeleteMapping("/{id}")
public void deleteData(@PathVariable("id") Long id) {
dataRepository.deleteById(id);
}
@GetMapping("/{id}")
public Data getData(@PathVariable("id") Long id) {
return dataRepository.findById(id)
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));
}
private void save(Data data) {
// 存储到数据库中
dataRepository.save(data);
// 递归存储子节点
for (Data child : data.getChild()) {
// 设置父节点id
child.setParentId(data.getId());
save(child);
}
}
}
```
其中 `Data` 类表示存储数据的实体类,代码如下:
```java
@Entity
@Table(name = "data")
public class Data {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Integer level;
private String content;
@Column(name = "parent_id")
private Long parentId;
@OneToMany(mappedBy = "parentId", cascade = CascadeType.ALL)
private List<Data> child = new ArrayList<>();
// getter 和 setter 省略
}
```
在接收到前端传来的数据后,我们使用 `save` 方法递归地存储数据,同时将子节点的 `parentId` 设置为当前节点的 `id`。在删除数据时,我们直接根据 `id` 删除即可。在查询数据时,我们根据 `id` 查询数据并返回,如果数据不存在,则抛出 `NOT_FOUND` 异常。