显示我创建的index.html网页时遇到问题。转到localhost:8080时我一直收到的输出是String值“index”而不是网页本身。 / templates目录的图像& localhost给出的结果可以在下面找到(超链接)
@Controller
public class IndexController {
@RequestMapping("/")
@ResponseBody
public String index() {
return "index";
}
}
答案 0 :(得分:3)
从控制器方法addNewBooking(...)中删除@ResponseBody
。使用@ResponseBody
,您可以告诉Spring将方法的结果映射到HTTP响应主体,因此您的浏览器将其显示为纯文本(如果要使用Spring开发RESTful API,则需要这样做)。当您使用Spring MVC时,您希望返回一个视图,因此您不需要@ResponseBody
。
编辑1:我写的详细解释。
使用Spring Web
,您有两种选择来编写您的应用:
JSPs
,Thymeleaf templates
,Freemaker templates
- >编写服务器端呈现的应用程序Spring MVC
模式对于选项1,您使用@Controller
注释您的控制器,并提供几个端点,您的Spring应用程序将使用您的服务器端渲染器模板进行响应。您的所有控制器都会返回String
,这是您要传输到浏览器的模板名称。 Spring会将String
这个名称视为index
并将返回,例如已呈现index.jsp
到请求。示例可能如下所示:
@Controller
public class IndexController {
@RequestMapping("/")
public String index() {
return "index";
}
}
对于选项2,您使用@RestController
或 @Controller
和@ResponseBody
一起注释您的控制器(技术上@RestController
只是@Controller
的组合{1}}和`@ResponseBody)。使用此设置,您可以告诉Spring使用您的控制器方法返回类型并解析它,例如与杰克逊一起使用JSON并将其置于HTTP体内。如果您在浏览器中访问此类端点,则可以获得
对象的JSON表示。请看以下示例:
@RestController
public class IndexController {
@RequestMapping("/persons")
public List<Person> getPersons() {
// ... some service calls/database access to get all persons
return personList;
}
}
Person类:
public class Person {
private String name;
private int age;
// getter and setter ...
}
如果您现在访问http://localhost:8080/persons
,则可以获得以下输出:
[
{
"name": "John Doe",
"age": 1337
},
{
"name": "Peter Parker",
"age": 12
}
]
总结说明:如果要提供视图(服务器端呈现的HTML页面),则必须使用@Controller
,并且控制器方法必须返回模板的名称。如果计划构建RESTful应用程序,请同时使用@RestController
或@Controller
和@ResponseBody
的组合。
答案 1 :(得分:1)
与其他人提到的一样,您需要做的第一件事就是从控制器方法中删除has_many :somemodels ...
注释。
其次,模板目录中的静态内容应移至
@ResponseBody
。 src/main/resources/static
目录用于提供需要在服务器端呈现的内容(例如Thymeleaf)。
然后,您可以直接从控制器提供内容。
templates
答案 2 :(得分:1)
@RequestMapping("/")
@ResponseBody
public String index() {
return "index";
}
删除@ResponseBody。
@RequestBody和@ResponseBody注释用于将HTTP请求/响应主体与方法参数或返回类型中的对象绑定。
@ResponseBody:Spring会将返回值绑定到传出的HTTP响应主体。
示例
@RequestMapping(value = "/checkuser",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE )
@ResponseBody
public Boolean checkValidateUser(@RequestParam Map<String, String>
requestParams){
String userName = requestParams.get("username");
String password = requestParams.get("password");
return
userBL.checkValidateUser(userName.trim().toUpperCase(),password.trim());
}
src / main / resources / static / assets / images /中的图片 src / main / resources / templates中的Html页面
@Controller
public class IndexController {
@RequestMapping("/")
public String index() {
return "index.html";
}
}
答案 3 :(得分:0)
如果您不像thyemleaf那样使用模板引擎,则必须将ui文件放入名为/src/main/resources
,/public
或/static
的{{1}}的子文件夹中。您的/resources
放入index.html
控制器:
/src/main/resources/public/index.html