Как преобразовать данные из MongoDB в View через контроллер в Spring MVC - PullRequest
0 голосов
/ 09 июля 2019

В Application.java я прочитал каждый документ в коллекции из базы данных MongoDB. И я сохранил все эти документы в ArrayList. Мне интересно, как передать этот ArrayList в класс контроллера?

Это веб-приложение Spring Boot. И я использую Spring MVC для работы над этим проектом.

Этот класс является Application.java. Я взял все туфли из MongoDB и сохранил их в переменной списка.

public class Application implements CommandLineRunner {

    @Autowired
    private ShoeRepository repository;
    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);
    }
    @Override
    public void run(String... args) throws Exception {

        // fetch all shoes
        List<Shoe> list = new ArrayList<>();
        System.out.println("Shoes found with findAll():");
        System.out.println("-------------------------------");
        for (Shoe shoe : repository.findAll()) {
            //System.out.println(customer);
            list.add(shoe);
        }
        System.out.println("all shoes have been saved to the list");
    }
}

Этот класс является моим классом контроллера:


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

@Controller
public class GreetingController {

    @RequestMapping(value = "/greeting" ,method = RequestMethod.GET)
    public String greeting(@RequestParam(name="name", required=true) List<Shoe> list, Model model) {
        model.addAttribute("name", list.get(0).asin);
        return "greeting";
    }
}

Кто может подсказать, как передать переменную списка в классе Application в класс Controller? Я хочу визуализировать данные, хранящиеся в переменной списка в представлении.

1 Ответ

1 голос
/ 09 июля 2019

Вы упускаете главное. Класс контроллера отличается от основного класса приложения в spring-boot. Класс контроллера используется для обслуживания http-запроса в соответствии с путем. Каждый запрос обслуживается отдельным потоком. Springboot для этого следует архитектуре MVC. Итак, у вас должен быть класс Controller для обслуживания запроса, класс Service для создания модели и уровень Repository для доступа к базе данных, какой бы она ни была. А также класс Model возвращается из контроллера.

@Controller
public class GreetingController {

    @Autowired
    private ShoeRepository repository;

    @RequestMapping(value = "/greeting" ,method = RequestMethod.GET)
    public String greeting(@RequestParam(name="name", required=true) List<Shoe> list, Model model) {
        model.addAttribute("name", list.get(0).asin);
        List<Shoe> list = new ArrayList<>();
        list.addAll(repository.findAll());
        return "greeting";
    }
}

Вы можете вызвать метод репозитория из контроллера, чтобы получить доступ к данным, которые должны быть правильными, или, что еще лучше, иметь промежуточный класс обслуживания, если у вас есть больше логики для реализации.

public interface ShoeRepository extends MongoRepository<Shoe, Long> {

    //Custom Query
    @Query("SELECT o FROM Object o WHERE o.field = somethingThatValidsIt")
    public List<Shoe> customFindAll();

    //Default CRUD repository implementation
    public List<Shoe> findAll()

    //Other methods
    public Shoe findByNameAndAvailable(String name, boolean available);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...