Весенняя загрузка с AngularJ с использованием @RestController и @GetMapping - PullRequest
0 голосов
/ 28 июня 2018

Я нашел много примеров, которые задают подобные вопросы. Тем не менее, в большинстве советов говорится, что вы просто должны использовать @Controller вместо @RestController, если хотите использовать:

//@Controller
@RestController // @Controller and @ResponseBody into one
public class SreAppController {
    @GetMapping("/")
    public String index() {
        return "index";
    }
}

Так как это просто возвращает индекс String и не извлекает файл HTML index.html. Я знаю, что @ResponseBody, который находится в теге @RestController, отображает выходные данные из этого вопроса. Итак, я нашел этот учебник, который дает этот код:

@RestController
public class SreAppController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @GetMapping("/greeting")
    public Greeting index(@RequestParam(value="name", defaultValue="World") String name){
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
    }
}

Который я хотел бы использовать с AngularJS и форматировать с использованием HTML. В этом руководстве показано, как использовать веб-сервис RESTful, но показано, как использовать http://rest -service.guides.spring.io /reeting . Я попытался поместить localhost: 8080 / приветствие в его место, но это все равно просто дает ошибку 404 для localhost: 8080 и просто возвращает json для localhost: 8080 / приветствие.

Как использовать @RestController с AngularJS и HTML в одном приложении? Намерение состоит в том, чтобы перейти к localhost: 8080 и получить тот же вывод, что и этот урок:

enter image description here

Я знаю, что json от localhost: 8080 / приветствие приходит прямо с контроллера Rest. Я не уверен, почему контроллер angularJS не найден при использовании localhost: 8080.

В учебнике указывается, что для веб-приложения Spring Boot необходимо минимальное количество кода веб-приложения. Предлагаемый app.groovy (показанный ниже), но мой контроллер покоя запускает встроенный сервер Tomcat, поэтому я не думаю, что это проблема.

app.groovy

@Controller class JsApp { }

Javascript и HTML для справки:

app.js

"use strict";
angular.module('demo', []).controller('app', function($scope, $http) {
        $http.get('/greeting').
            then(function (response) {
            $scope.greeting = response.data;
    });
});

index.html

<!DOCTYPE html>
<html lang="en" ng-app="demo">
<head>
    <meta charset="UTF-8">
    <title>Hello AngularJS</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.2/angular.min.js"></script>
    <script src="app.js"></script>
</head>
<body>
    <div ng-controller="app">
        <p>The ID is {{greeting.id}}</p>
        <p>The content is {{greeting.content}}</p>
    </div>
</body>
</html>

Иерархия проекта

enter image description here

1 Ответ

0 голосов
/ 28 июня 2018

Итак, вы намереваетесь получить доступ к вашему приложению AngularJS, которое находится внутри приложения Spring Boot, но index.html не отображается, innit?

Тогда вам нужно знать пару вещей:

1) Ваше приложение AngularJS должно быть статическим контентом.

Вы можете найти несколько примеров в этом руководстве: Обслуживание статического веб-контента с помощью Spring Boot .

По сути, ваше приложение AngularJS должно быть размещено в исходном коде приложения Spring Boot в специальной папке, используемой для статического содержимого - есть несколько параметров, но обычно оно будет называться / public или /static.

.

2) Spring Boot управляет всеми вашими URL.

Это означает, что приложение Spring Boot перехватывает все запросы к вашему приложению, а затем пытается сопоставить URL-адреса со всеми существующими @ Controller.

Итак, если у вас GET http://<your ip:port>/ и у вас @Controller, сопоставляющий корень / с GET, тогда этот @Controller ответит на запрос, как это происходит в первом примере вашего SreAppController класса.

Но если вы этого не сделаете, Spring Boot попытается найти статический контент в каждой из специальных папок для этого и - он обнаружил - подать его.

Остерегайтесь, вы можете смешивать ULR в контроллерах и статической веб-навигации ...!

Надеюсь, я помог хоть немного. : -)

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