如何通过class级RequestMapping调用请求映射方法级
how to call request mapping method level through class level RequestMapping
我使用 spring 编写了一个简单的程序。当我没有使用 class 级别 RequestMapping 时,我得到了方法级别 RequestMapping 的答案。但我想同时使用 class 级别和方法级别的 RequestMapping。
这是我的控制器代码
package com.birthid;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/classLevel")
public class Controaller1
{
@RequestMapping("/spring")
public ModelAndView display(@RequestParam("name") String name)
{
ModelAndView model=new ModelAndView("view");
model.addObject("msg", name);
return model;
}
}
html代码
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Hello App Engine</title>
</head>
<body>
<h1>valith web application!</h1>
<form action="/classLevel" method="get">
name:<input type="text" name="name"/><br>
<input type="submit" value="clik me"/>
</form>
</body>
</html>
当我在地址栏中输入 url 时。我得到了准确的输出。 http:localhost:8888/classLevel/spring?name=john
但是当我按下我在 html 页面中设计的按钮时,出现错误。
好吧,问题出在你的表单操作上,你有 action="/classLevel"
应该是 action="/classLevel/spring"
因为你的方法有 /spring
作为 RequestMapping 所以改变 :
<form action="/classLevel" method="get">
收件人:
<form action="/classLevel/spring" method="get">
因为正如您在 url 测试中所做的那样,方法调用应该是:/classLevel/spring
.
查看 Spring 文档 的 Mapping Requests With @RequestMapping 部分以获取更多信息。
众所周知:
在 Spring MVC 中,您可以 return 作为 String
或 ModelAndView
对象查看。
重要提示:
在这两种情况下,您都必须注意 relative/absolute path:
- 如果您在视图名称的开头声明
/
,则您使用的是 绝对路径。
即无所谓class级别@RequestMapping
直接介绍自己为最终视图名.
- 如果您不在视图名称的开头声明
/
,则您使用的是相对路径(相对到 class 路径),因此它 附加 到 class 级别 @RequestMapping
以构造 最终视图名称.
因此,在使用Spring MVC时必须考虑以上注意事项。
示例:
1. 在spring(boot)结构的static
文件夹中创建两个HTML文件test1.html
和test2.html
:
请注意 class level @RequestMapping
在 relative 的情况下表现为 folder 路径路径。
--- resources
--- static
--- classLevelPath //behaves as a folder when we use relative path scenario in view names
--- test2.html //this will be used for relative path [case (2)]
--- test1.html //this will be used for absolute path [case (1)]
- 创建一个控制器 class 如下所示。此示例显示 return
String
和 ModelAndView
在 relative 和 absolute 路径中的不同情况。
@Controller
@RequestMapping("/classLevelPath")
public class TestController {
//case(1)
@RequestMapping("/methodLevelAbsolutePath1")
public String absolutePath1(Model model){
//model.addAttribute();
//...
return "/test1.html";
}
//case(1)
@RequestMapping("/methodLevelAbsolutePath2")
public ModelAndView absolutePath2(Model model){
ModelAndView modelAndView = new ModelAndView("/test1.html");
//modelAndView.addObject()
//....
return modelAndView;
}
//case(2)
@RequestMapping("/methodLevelRelativePath1")
public String relativePath1(Model model){
//model.addAttribute();
//...
return "test2.html";
}
//case(2)
@RequestMapping("/methodLevelRelativePath2")
public ModelAndView relativePath2(Model model){
ModelAndView modelAndView = new ModelAndView("test2.html");
//modelAndView.addObject()
//....
return modelAndView;
}
}
注:
您可以通过 ViewResolver
指定视图文件的后缀(例如 InternalResourceViewResolver
或 spring.mvc.view.suffix=.html
在 Spring Boot 的 appliction.properties
文件中并且不要声明 .html
后缀在上面的代码中。
此致
我使用 spring 编写了一个简单的程序。当我没有使用 class 级别 RequestMapping 时,我得到了方法级别 RequestMapping 的答案。但我想同时使用 class 级别和方法级别的 RequestMapping。
这是我的控制器代码
package com.birthid;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/classLevel")
public class Controaller1
{
@RequestMapping("/spring")
public ModelAndView display(@RequestParam("name") String name)
{
ModelAndView model=new ModelAndView("view");
model.addObject("msg", name);
return model;
}
}
html代码
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Hello App Engine</title>
</head>
<body>
<h1>valith web application!</h1>
<form action="/classLevel" method="get">
name:<input type="text" name="name"/><br>
<input type="submit" value="clik me"/>
</form>
</body>
</html>
当我在地址栏中输入 url 时。我得到了准确的输出。 http:localhost:8888/classLevel/spring?name=john
但是当我按下我在 html 页面中设计的按钮时,出现错误。
好吧,问题出在你的表单操作上,你有 action="/classLevel"
应该是 action="/classLevel/spring"
因为你的方法有 /spring
作为 RequestMapping 所以改变 :
<form action="/classLevel" method="get">
收件人:
<form action="/classLevel/spring" method="get">
因为正如您在 url 测试中所做的那样,方法调用应该是:/classLevel/spring
.
查看 Spring 文档 的 Mapping Requests With @RequestMapping 部分以获取更多信息。
众所周知:
在 Spring MVC 中,您可以 return 作为 String
或 ModelAndView
对象查看。
重要提示:
在这两种情况下,您都必须注意 relative/absolute path:
- 如果您在视图名称的开头声明
/
,则您使用的是 绝对路径。
即无所谓class级别@RequestMapping
直接介绍自己为最终视图名. - 如果您不在视图名称的开头声明
/
,则您使用的是相对路径(相对到 class 路径),因此它 附加 到 class 级别@RequestMapping
以构造 最终视图名称.
因此,在使用Spring MVC时必须考虑以上注意事项。
示例:
1. 在spring(boot)结构的static
文件夹中创建两个HTML文件test1.html
和test2.html
:
请注意 class level @RequestMapping
在 relative 的情况下表现为 folder 路径路径。
--- resources
--- static
--- classLevelPath //behaves as a folder when we use relative path scenario in view names
--- test2.html //this will be used for relative path [case (2)]
--- test1.html //this will be used for absolute path [case (1)]
- 创建一个控制器 class 如下所示。此示例显示 return
String
和ModelAndView
在 relative 和 absolute 路径中的不同情况。
@Controller
@RequestMapping("/classLevelPath")
public class TestController {
//case(1)
@RequestMapping("/methodLevelAbsolutePath1")
public String absolutePath1(Model model){
//model.addAttribute();
//...
return "/test1.html";
}
//case(1)
@RequestMapping("/methodLevelAbsolutePath2")
public ModelAndView absolutePath2(Model model){
ModelAndView modelAndView = new ModelAndView("/test1.html");
//modelAndView.addObject()
//....
return modelAndView;
}
//case(2)
@RequestMapping("/methodLevelRelativePath1")
public String relativePath1(Model model){
//model.addAttribute();
//...
return "test2.html";
}
//case(2)
@RequestMapping("/methodLevelRelativePath2")
public ModelAndView relativePath2(Model model){
ModelAndView modelAndView = new ModelAndView("test2.html");
//modelAndView.addObject()
//....
return modelAndView;
}
}
注:
您可以通过 ViewResolver
指定视图文件的后缀(例如 InternalResourceViewResolver
或 spring.mvc.view.suffix=.html
在 Spring Boot 的 appliction.properties
文件中并且不要声明 .html
后缀在上面的代码中。
此致