java - 如何在没有数据库的情况下在Spring Boot中创建对象集合?

标签 java spring model

我是 SpringBoot 新手。我不知道如何创建一些相同类型的对象,以便稍后可以在 Controller 中使用这些对象。

假设我想在应用程序启动时创建对象集合/列表(假设是兔子集合):

 @SpringBootApplication
    public class Application {

        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
            // I would like to create here a collection
            // or a list of objects (let's say collection of Rabbits)
        }

}

我希望以后能够在 Controller 中使用此对象来获取一些信息(例如通过列表中的索引获取)。

在没有数据库的情况下保持模型状态的正确方法是什么?

最佳答案

忽略同步问题。

您可以创建一个列表并将其注入(inject)到您的 Controller 中。

或者我喜欢做的是将其包装在存储库中。这使您与底层数据源隔离,并且可以在以后进行更改。

请注意,同步对于这种类型的数据结构很重要,因为您可以有许多线程更新存储库。

package com.example.demo;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class Demo1Application {

    public static void main(String[] args) {
        SpringApplication.run(Demo1Application.class, args);
    }

    @Bean
    public RabbitRepository rabbitRepository() {
        RabbitRepository rabbitRepository = new RabbitRepository();
        rabbitRepository.add("Bugs");
        rabbitRepository.add("Flopsy");
        return rabbitRepository;
    }

    public static class RabbitRepository {
        private List<Rabbit> rabbits = Collections.synchronizedList(new ArrayList<Rabbit>());

        public List<Rabbit> getAll() {
            return rabbits;
        }

        public Rabbit add(String rabbitName) {
            Rabbit rabbit = new Rabbit(rabbitName);
            this.rabbits.add(rabbit);
            return rabbit;
        }

        public Optional<Rabbit> findById(int id) {
            return this.rabbits.stream().filter(r-> r.getId() == id).findFirst();
        }

    }

    public static class Rabbit {
        private final String name;

        private final int id;

        private static AtomicInteger counter = new AtomicInteger();

        public Rabbit(String name) {
            super();
            this.name = name;
            this.id = counter.incrementAndGet();
        }

        public String getName() {
            return name;
        }


        public int getId() {
            return this.id;
        }


    }

    @RestController
    @RequestMapping("/rabbits")
    public static class RabbitController {
        private final RabbitRepository repository;

        public RabbitController(final RabbitRepository repository) {
            this.repository = repository;
        }

        @GetMapping
        public List<Rabbit> getAll() {
            return repository.getAll();
        }

        @PostMapping("/{name}")
        //You can also use requestparam / requestbody and probably should
        public Rabbit addRabbit(@PathVariable("name") String name) {
            return repository.add(name);
        }

        @GetMapping("/id/{id}")
        public Optional<Rabbit> findById(@PathVariable("id") int id) {
            return repository.findById(id);
        }

    }

}

curl 测试

➜  ~ curl localhost:8080/rabbits            
    [{"name":"Bugs","id":1},{"name":"Flopsy","id":2}]%
➜  ~ curl localhost:8080/rabbits/id/2       
    {"name":"Flopsy","id":2}%                                                       
➜  ~ curl -XPOST localhost:8080/rabbits/Babs
    {"name":"Babs","id":3}%                                                         
➜  ~ curl localhost:8080/rabbits            
    [{"name":"Bugs","id":1},{"name":"Flopsy","id":2},{"name":"Babs","id":3}]%

关于java - 如何在没有数据库的情况下在Spring Boot中创建对象集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53837174/

相关文章:

spring - 如何使用 JDBC 在 Spring 中创建动态连接(数据源)

java - Docker 中的 Spring Boot 静态文件夹

java - 为什么我得到空值? ( hibernate 、 Spring )

python - 自定义用户模型的问题

sql - 从 yii 中的两个相关模型中检索两列的总和

Java 构造函数和空指针异常

java - 为什么 String.equals() 不在后台使用 hashCode() 相等性检查?

java - ArrayBlockingQueue,如果在添加元素时队列已满,则删除队列头

java - 坚持使用 Dagger 进行 Activity 的演示者

ruby-on-rails - Rails - 具有多个数据库的相同模型(只读)