簡體   English   中英

使用@RestController和@GetMapping與AngularJs進行春季引導

[英]Spring boot with AngularJs using @RestController and @GetMapping

我發現了很多提出類似問題的例子。 但是,大多數建議都建議在要使用時僅使用@Controller而不是@RestController:

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

由於這只會返回String索引,而不會獲取HTML文件index.html。 我知道@RestController標記中的@ResponseBody可以按此問題呈現輸出。 因此,我找到了提供此代碼的教程:

@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 Web服務,但顯示了如何從http://rest-service.guides.spring.io/greeting使用 我嘗試將localhost:8080 / greeting放到該位置,但這仍然只為localhost:8080提供404錯誤,並且只為localhost:8080 / greeting返回json。

如何在一個應用程序中將@RestController與AngularJS和HTML結合使用? 目的是轉到localhost:8080並獲得與本教程相同的輸出:

在此處輸入圖片說明

我知道來自localhost:8080 / greeting的json直接來自Rest控制器。 我不確定為什么在使用localhost:8080時找不到angularJS控制器。

本教程指出需要最少的Web應用程序代碼,因此Spring Boot知道如何啟動Tomcat。 建議使用app.groovy(如下所示),但是我的rest控制器啟動了嵌入式Tomcat服務器,因此我認為這不是問題。

應用程序

@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>

項目層次結構

在此處輸入圖片說明

因此,您打算做的是訪問Spring Boot應用程序內部的AngularJS應用程序,但index.html不顯示,提示?

然后,您需要了解以下幾點:

1)您的AngularJS應用程序必須作為靜態內容提供。

您可以在本教程中找到一些示例: 使用Spring Boot提供靜態Web內容

基本上,您的AngularJS應用必須放置在用於靜態內容的特殊文件夾中的Spring Boot應用源代碼中-有多個選項,但通常將其命名為/ public或/ static。

2)Spring Boot管理您的所有URL。

這意味着Spring Boot應用程序會攔截對您應用程序的所有請求,然后嘗試將URL與所有現有@Controller進行匹配。

因此,如果您GET http://<your ip:port>/並且具有一個@Controller映射根/GET ,則該@Controller將響應該請求,就像在SreAppController類的第一個示例中SreAppController

但是,如果您不這樣做,Spring Boot會嘗試在每個特殊文件夾中查找靜態內容,並為它提供服務。

請注意,您可以在控制器和靜態Web導航中混合使用ULR ...!

希望我至少能有所幫助。 :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM