gpt4 book ai didi

java - POSTed JSON 中的实体关系与 Spring Boot

转载 作者:行者123 更新时间:2023-11-30 10:38:16 26 4
gpt4 key购买 nike

Spring Boot(使用 Jackson)可以很好地处理 JSON 文档和 Java POJO 之间的对象映射。例如:

{ id: 5, name: "Christopher" }

可以被接受:

@PostMapping("/students/{id}")
public Student Update(Long studentId, @RequestBody Student student) {

studentRepository.save(student);

return student;
}

并将正确映射到:

public class Student {
private Long id;
private String name;
...
}

但是 JSON 中的嵌套模型呢?

{ id: 5, name: "Christopher", grades: [ {id: 1, letter: 'A'} ] }

或者 JSON 中的可选模型?

{ id: 5, name: "Christopher" }
(Purposefully leaving out 'grades', though it could be accepted.)

或者指示删除 JSON 中的关联(例如使用 Rails 的 _destroy 标志)?

{ id: 5, name: "Christopher", grades: [ {id: 1, letter: 'A', _destroy: true} ] }

或者通过省略 ID 来创建关联?

{ id: 5, name: "Christopher", grades: [ {letter: 'A-'} ] }

Spring Boot 支持这些想法吗?

最佳答案

But what about nested models in the JSON?

嵌套模型的映射如您所料,假设您有以下模型:

public class Product {
private String name;
private List<Price> prices;
}


public class ProductPrice {
Long idPrice;
Integer amountInCents;
}

Jackson 将从该架构创建以下 JSON:

{
"name":"Samsung Galaxy S7",
"prices":[
{
"idPrice":0,
"amountInCents": 100
}
]
}

Or optional models in the JSON?

您可以使用@JsonIgnore 注释字段。例如,如果您使用 @JsonIgnore 注释价格,则不会从 jackson 序列化任何价格。

Or indicating the removal of an association in JSON (example using Rails' _destroy flag)?

我会创建一个额外的映射来删除关联。这还有另一个优点,API 是 self 解释的。

 @DeleteMapping("/students/{id}/grade/{idGrade}")
public Student Update(Long studentId, @PathVariable Long idGrade) {

studentService.deleteGrade(studentId,idGrade);

return student;
}

Or creating an association by leaving out the ID?

我还会在这里创建一个额外的映射:

@PostMapping("/students/{id}/grade")
public Student Update(Long studentId, @PathVariable String grade) {

studentService.addGrade(studentId,grade);

return student;
}

注意:我不直接使用存储库,我创建了一个服务层,每个存储库都有包保护访问。在服务层中,您可以创建 addGrade、deleteGrad、addStudent、deleteStudent 等方法

关于java - POSTed JSON 中的实体关系与 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39775184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com