Spring отправляет пользователя на просмотр, когда он не запрашивается

Результат 01DBEE41 EB22A9CB, EDX хранит большую часть. Десятичные числа не являются конкатенабельными при работе с двоичным представлением чисел.

0
задан Chrips 17 February 2019 в 17:49
поделиться

1 ответ

Когда вы щелкаете ссылку в своем браузере с привязкой load-books , ваш браузер отправляет ее на сервер и ждет результата, который приводит к перезагрузке вашей страницы. Как только запрос к конечной точке load-book достиг сервера, Spring MVC обрабатывает это и начинает поиск подходящего контроллера с его методом. В твоем случае он находит public void loadBooks(Model model). Когда Spring MVC вызывает метод, он ожидает получить имя представления для разрешения и возврата обратно в браузер.
Поскольку вы не указали View или String в качестве возвращаемого типа, Spring MVC использовал путь конечной точки в качестве имени представления (я не вижу вашей константы Mappings.LOAD_BOOKS, но она должна быть . ] загрузки книг ). Если вы не собираетесь возвращать какое-либо представление обратно в браузер, вы можете аннотировать метод следующим образом:

@GetMapping(Mappings.LOAD_BOOKS)
@ResponseBody
public void loadBooks(Model model) {

, который говорит Spring, чтобы он воспринимал void как тело ответа. Но это не мешает обновлению страницы, вы просто увидите пустую страницу после нажатия на ссылку. Чтобы это исправить, вы можете перенаправить пользователя на другую страницу, возвращая следующую строку (без аннотации ResponseBody о методе)

return "redirect:/path-to-redirect";

Когда Spring MVC видит этот префикс, он перенаправляет вас на другой контроллер, но пользователь собираюсь заметить это тоже.

Если вы действительно не хотите на мгновение видеть пустую страницу, вам придется использовать некоторый JavaScript для выполнения AJAX-запроса к серверу при нажатии кнопки.

На самом деле кажется, что вы хотите предварительно загрузить некоторые файлы в сервис по заданному пути. Если это все, что вы хотите сделать, вы можете использовать бегуны Spring следующим образом:

@Component
class Preloader implements ApplicationRunner {

    private final BookCatalogService bookService;

    @Autowired
    public Preloader(BookCatalogService service) {
        this.bookService = service;
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        bookService.loadBooksFromDirectory(BookCatalogController.bookDirectory);
    }
}

Spring автоматически вызывает всех зарегистрированных бегунов, когда приложение готово, поэтому ваш код будет выполнен без посещения пользователем [119 ] load-books конечная точка.

0
ответ дан Andrey Antipov 17 February 2019 в 17:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: