我有一个帐户类,用于我正在构建的求职应用程序,其中包含教育实例的链接列表(只是大学名称,gpa等)。我想要一个HTTP Post请求来向列表中添加一个元素:
@PostMapping("/education/{id}")
void newAccount(@RequestBody Education newEducation, @PathVariable Long id) {
Account a = repository.findById(id).orElseThrow(() -> new AccountNotFoundException(id));
a.addEducation(newEducation);
}
这是account类:
import java.util.LinkedList;
import java.util.Objects;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Account {
private @Id @GeneratedValue Long id;
private String name;
private String email;
private String phone;
private LinkedList<Education> education;
Account() {}
Account(String name, String email, String phone) {
education = new LinkedList<>();
this.setName(name);
this.setEmail(email);
this.setPhone(phone);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id=id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public LinkedList<Education> getEducation() {
return education;
}
public void addEducation(Education e) {
education.add(e);
}
@Override
public boolean equals(Object o) {
if (this==o)
return true;
if (!(o instanceof Account))
return false;
Account acc = (Account)o;
return name.equals(acc.name);
}
@Override
public int hashCode() {
return Objects.hash(this.id, this.name);
}
@Override
public String toString() {
String edu="";
if (!this.education.isEmpty())
{
edu+=", \"Education: [";
for (Education e: this.education)
{
edu+=e.toString();
}
edu+="]";
}
String s = "Account{";
s += String.format("\"id\": \"%s\", ", this.id);
s += String.format("\"name\": \"%s\", ", this.name);
s += String.format("\"email\": \"%s\", ", this.email);
s += String.format("\"phone\": \"%s\"", this.phone);
s += edu;
s += "}";
return s;
}
}
然而,当我实际发送带有教育数据的post请求时(针对一个已经存在的用户),它并不发布。它确实正确地打印了帐户a(添加了教育),但实际上并不更新数据库。
此外,这是我拥有的另一个类:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class LoadDatabase {
private static final Logger log =
LoggerFactory.getLogger(LoadDatabase.class);
@Bean
CommandLineRunner initDatabase(AccountRepository repository) {
return args -> {
log.info("Preloading " + repository.save(new Account("Alex", "ax@b.com", "214")));
Account a= new Account("Bob", "bob@n.com", "972");
//a.addEducation(new Education("B.S.", "Uni", 3.64));
//log.info("Preloading " + repository.save(a));
};
}
}
编辑:这是教育课:
public class Education {
private String degree;
private String institute;
private double gpa;
Education(String degree, String institute, double gpa) {
this.setDegree(degree);
this.setInstitute(institute);
this.setGpa(gpa);
}
public String getDegree() {
return degree;
}
public void setDegree(String degree) {
this.degree = degree;
}
public String getInstitute() {
return institute;
}
public void setInstitute(String institute) {
this.institute = institute;
}
public double getGpa() {
return gpa;
}
public void setGpa(double gpa) {
this.gpa = gpa;
}
@Override
public String toString() {
String s = "{";
s += s += String.format("\"degree\": \"%s\"", this.degree);
s += String.format("\"institute\": \"%s\"", this.institute);
s += String.format("\"gpa\": %.2f", this.gpa);
s += "}";
return s;
}
}
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/list.html
问题是,只要您的列表是动态的,就不能序列化,而是需要序列化才能能够传输到数据库。所以您必须确保您的列表是可序列化的。这是通过“List.of和List.CopyOf静态工厂方法提供了创建不可修改列表的便捷方式”来实现的。这意味着,在将对象发送到数据库之前,必须确保列表对象是不可修改的/不是动态的。
问题内容: 我的问题是我想在遍历新元素的同时扩展一个包含新元素的列表,并且希望迭代器继续刚才添加的元素。 根据我的理解,会在列表中的当前元素之前而不是之后添加一个元素。是否可以通过其他方式实现这一目标? 问题答案: 除了以外,您无法在修改集合时使用进行迭代。 但是,如果使用方法,该方法返回,并对其进行迭代,则您还有更多要修改的选项。从javadoc中获取: 新元素插入到隐式光标之前:…后续调用将返
我正在尝试使用时循环将元素添加到双向链表中。节点正在制作中,但它们都存储相同的单词,这是我正在阅读的文件的最后一个单词。这是我的时循环: 在while循环开始之前,光标被初始化为列表的开头。 这是我的节点结构: 我的时循环出了什么问题?为什么它总是覆盖以前的节点?请并谢谢你!
问题内容: 这个清单对象在咬我屁股。 每当我尝试向其中添加元素时,它都会产生以下结果: 产生错误的行无关紧要,但无论如何这里都是这样: 我不应该静态访问它吗? 变量的实际声明: 有任何想法吗?在Google上找不到任何值得的东西。 问题答案: Arrays.asList()将给您返回不可修改的列表,这就是为什么添加失败的原因。尝试使用以下方法创建列表:
主要内容:Python append()方法添加元素,Python extend()方法添加元素,Python insert()方法插入元素实际开发中,经常需要对 Python 列表进行更新,包括向列表中添加元素、修改表中元素以及删除元素。本节先来学习如何向列表中添加元素。 《 Python序列》一节告诉我们,使用 运算符可以将多个序列连接起来;列表是序列的一种,所以也可以使用 进行连接,这样就相当于在第一个列表的末尾添加了另一个列表。 请看下面的演示: 运行结果: language = ['P
lpush key string 在key对应list的头部添加字符串元素,返回1表示成功,0表示key存在且不是list类型。注意:江湖规矩一般从左端Push,右端Pop,即LPush/RPop。 lpushx 也是将一个或者多个value插入到key列表的表头,但是如果key不存在,那么就什么都不在,返回一个false【rpushx也是同样】 rpush key string 同上,在尾部添加
问题内容: 我想避免。我该怎么办? 问题答案: 您可以在迭代本身期间使用支持remove / add方法的。