相关标签@RequestMapping可以在方法也是可以在类上面
@AliasFor("path")
String[] value() default {};
@AliasFor("value")
String[] path() default {};
RequestMethod[] method() default {};
method()为请求方式
如果是多个属性的话value不能省略
method的请求方式
public enum RequestMethod {
GET,
HEAD,
POST,
PUT,
PATCH,
DELETE,
OPTIONS,
TRACE;
private RequestMethod() {
}
}
里面其他的属性
String[] params() default {};
String[] headers() default {};
String[] consumes() default {};
String[] produces() default {};
}
其中的params为相关参数,如果请求中有相关参数才能进行匹配
请求参数的绑定
1.请求参数的绑定说明:说简单点就是将请求的参数进行匹配到相关的方法,方法中的参数拿到相关的参数数据,这个过程为mvc底层实现,也就是请求参数的绑定
-
绑定机制
-
表单提交的数据都是k=v格式的usernamne=haha&password=123
-
springmvc的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
-
要求:提交表单的name和参数的名称是相同的
2.支持的数据类型
-
基本数据类型和字符串类型(在相关的请求对应的方法参数相对应)
-
实体类型(先建立一个实体类与要交的数据相对应,提交的数据会被封装到这个类中从而被使用
@RequestMapping(value = "/hello") public String hello(Account account){ System.out.println("你好啊逗比----------"+account); return "success"; }
<form action="user/hello" method="post"> 姓名:<input type="text" name="name"/><br> 性别:<input type="text" name="sex"/><br> 年龄:<input type="text" name="old"/><br> <input type="submit" value="确定"> </form>
上面实体类压根就不用param属性,只需要相关的方法有参数对象
-
集合数据类型
这种也差不多例如------------list[0].name
姓名:
性别:
年龄:
2.基本数据类型和字符串类型
- 提交表单的name和参数的名称是相同的
- 区分大小写
3.实体类型
- 提交表单的name和javabean中的属性名称需要一致
- 如果一个javabean类中包含其他的引用类型,那么表单的name属性需要编写成:对象.属性例如:address.name
过滤器,是不是很耳熟,就是那玩意,常用于解决中文乱码的问题
<filter>
<filter-name>charactereccodingfilter</filter-name>
<filter-class>org.springframework.web.filter.characterencodingfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>charactereccodingfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在某些特殊情况下就需要自定义接口,要自定义它咋知道就需要实现Converter<a,b>,a为被转换的类型,b为转换后的类型,当定义后自己的后,还得告诉它你有特殊格式转换
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="相关实现接口的类路径"></bean>
</set>
</property>
</bean>
这种转换器就前端请求的数据到后端会被自动转换的设置
如果是想获取servlet原始的方法如requestion可以在相关应的请求方法参数直接为servlet中的相关对象,但是这种偶合性太强不建议使用
@RequestMapping("/you")
public String you(HttpRequest request){
return "your";
}
响应返回值
当返回值是字符串时,就不用说了
@RequestMapping(value = "/hello")
public String hello(Account account){
System.out.println("你好啊逗比----------"+account);
return "success";
}
如果是想存值的,返回给前端获得如下,在方法的参数中加入model参数
@RequestMapping("/you")
public String you(Model model){
Account account=new Account();
account.setName("doubi");
account.setSex("nan");
account.setOld(12);
model.addAttribute("user",account);
//这样前端就能利用request获取
return "your";
}
当返回值类型为void时
可以利用servlet中的转发的方式类进行跳转
@RequestMapping("/you")
public void you(HttpRequest request){
request.getRequestdispatcher("/web-inf/pages/success.jsp").forward(request,response);
}
也可以用重定向
@RequestMapping("/you")
public String you(HttpRequest request,HttpResponse response){
//设置中文乱码
response.setCharacterencoding("utf-8");
response.setContententType("text/html;charset=utf-8")
response.sendredirect("request.getcontextpath()+"+"/web-inf/pages/xxx.jsp")
}