[英]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.