当前位置: 首页 > 知识库问答 >
问题:

添加到Java Spring类中的元素列表中

景令秋
2023-03-14

我有一个帐户类,用于我正在构建的求职应用程序,其中包含教育实例的链接列表(只是大学名称,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;
    }
}

共有1个答案

林泰平
2023-03-14

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方法的。