【发布时间】:2020-06-17 23:29:29
【问题描述】:
我正在尝试编写一个 REST API 来管理发票。作为这个项目的一部分,我遇到了一个问题。 如果在 Json 发布请求中指定了对象,我无法弄清楚如何将某种类型的对象添加到该类型的列表中。 Jason 包含 3 个主要元素:
发票编号 - 收件人(包含该收件人所需的所有数据) - 文章数量未知
虽然控制器很好地保存了发票编号和收件人,但它不会保存文章,也不会将它们添加到发票列表中。
我确实在 Stackoverflow 上搜索过此类问题,但是直到现在我还没有找到解决方案。
我还尝试使用 ObjectMapper 将整个 Jason Post 映射到地图,但如果我必须将每个输入映射到地图,然后搜索地图以重建对象,那么这既不方便,也不高效我可以将它们保存到数据库中。
在我开始从事这个项目之前,我对 Spring boot 完全不了解,只有非常基本的 Java 知识,现在我发现自己陷入了困境。
为了给你一个想法,这里是我的控制器:
@RestController
public class RechnungController {
@Autowired
private RechnungRepository rechnung_repo;
@Autowired
private EmpfaengerRepository empf_repo;
//Get Mappings
@PostMapping ("/rechnungen")
@ResponseBody
public Rechnung rechnungSave (@RequestBody Rechnung r) {
Rechnung r_save = rechnung_repo.save(r);
return r_save;
}
//More get Mapping
}
这是我的发票定义:
@Entity
public class Rechnung {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long Id;
private int rechnungsnummer;
@OneToMany (
cascade = CascadeType.ALL,
orphanRemoval = true
)
@JoinColumn (name ="rechnungID")
private List <Artikel> artikelliste = new ArrayList <Artikel>();//erstellt eine Liste von Artikeln vom Typ ArrayList
@OneToOne (cascade = CascadeType.ALL)
@JoinColumn(name= "empf", referencedColumnName = "Id")
@RestResource
private Empfaenger empfaenger;
//Getters Setters and Constructor
这是我要发布的 Json
{
"rechnungsnummer":"02552425",
"empfaenger": {
"name" : "nnnnnn",
"vorname" : "vvvvv"
},
"artikels":{
"artikel":{
"preis":"12.33"
}
"artikel":{
"preis":"12.33"
}
}
}
任何指针都会有所帮助。 谢谢。
【问题讨论】:
-
所以你的问题是什么类型的 JAVA 对象可以处理你的 JSON ?您应该使用哈希图。
-
Json好像无效,
artikels好像是一个列表,所以应该有方括号"artikels":["artikel":{}] -
通常,返回一个实体不是一个好主意。您应该将您的实体映射到 DTO。当 DTO 用于在进程之间传输数据时,实体会链接到您的数据库。
标签: java json spring-boot jpa