1.@controller 注解
Controller 注解类型用于指定Spring类实例是一个控制器,被注解的类不需要继承特定的父类或则特定的接口,相对于实现接口变得更加简单。
分发处理器会扫描使用了该注解的类的方法,并检测是否使用了@RequestMapping 注解,而使用RequestMapping 注解的方法才是真正处理请求的处理器。
为了保证Spring能找到控制器,需要完成两件事情:
- 在SpringMVC 配置文件的头文件中引入spring-context
- 使用< context:component-scan/> 元素:启动包扫描功能,将注册带有@Controller @Service @Component @repository 等注解的类成为Spring 的Bean
2.@RequestMapping注解
开发者需要在控制器内部每一个请求动作开发一个处理方法,@Request Mapping 注解类型指示Spring用哪一个类或则方法来处理请求动作
在请求方法可出现和返回的参数类型中,最重要的就是Model 和 ModelAndView ,控制器执行业务逻辑,用于产生数据模型(model) ,而视图(view)用于渲染模型数据。
3.@RequestParam注解
RequestParam 注解类型用于将指定的请求参数赋值给方法中的形参
语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)
value:参数名
required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数(这里的参数名必须与提交时候的参数名一致),如果不包含就报错。
defaultValue="" :当required为FALSE时候,且参数不一致时候使用
@requestMapping(value="/login")
public ModelAndView login(
@requestParam("loginname") String loginname1,#与接收的参数名可以不一致
@requestParam("password") String password){
...}
4.@PathVariable 注解
PathVariable注解类型可以非常的方便获取请求URL中的动态参数
@RequestMapping(value="/pathTest/{userId}")
public void pathVariableTest(@PathVariable Integer userId)
5.@RequestHeader 注解
RequestHeader 注解类型用于将请求的头信息数据映射到功能处理方法的参数上
@ReuestMapping(value="/requestHeaderTest")
public void requestHeadertest(
@RequestHeader("User-Agent") String userAgent)...
6.@requestBody 注解
RequestBody 注解用于读取Request 请求的body 部分数据,使用系统默认配置的HttpMessageConverter 进行解析,然后将对应的数据(转换为相应对象)绑定到Controller 方法的参数上。
在Json 格式转化中,需要实现加入JackSon jar包到WEB-INF/lib 下
0.配置默认转化器
<mvc:annotation-driven/>
1.Ajax传递json字符串到后台
<script type="text/javascript">
$(document).ready(function(){
var DataArray=[];
var data1={"userName":"wangkangning","address":"guangzhou"};
var data2={"userName":"wangchao","address":"chengdu"};
DataArray.push(data1);
DataArray.push(data2);
$.ajax({
type:"POST",
url:"user/saveUser",
dataType:"json",
contentType:"application/json",//发送至服务器时的内容编码格式。
data:JSON.stringify(DataArray),
success:function(data){ //请求成功后的回调函数。
}
error:function()
{alert("error");}
});
});
</script>
2.RequestBody 接收Json字符串并绑定(相同名称进行绑定),转为为相应对象类型
@RequestMapping(value = "user/saveUser", method = RequestMethod.POST)
@ResponseBody
public void saveUser(@RequestBody List<User> users) {
//使用Jackson库进行处理
ObjectMapper mapper =new ObjectMapper();
for(int i=0;i<user.size();i++)
{
String json =mapper.writeValueAsString(users[i]); //将user对象转换为json输出。
}
User user = new User();
user = mapper.readValue(json,User.class); //将json转换为json对象。
System.out.println(user);
}
7.@Autowired与@Resource
1)@Resource装配顺序
- 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
- 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
- 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
- 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配
主要区别
- 列表内容@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
- @Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象(对应xml配置中配置了该bean对象)必须存在,如果要允许null值,可以设置它的required属性为false(如果直接通过xml配置方式代替Autowired则需要包含该属性的类拥有该属性的getter与setter 方法)
- @Resource(这个注解属于J2EE的,是JSR规范定义的注解),判断@Resource注解括号中的name属性是否为空,如果为空:看spring容器中的bean的id与@Resource要注解的那个变量属性名是否相同,如相同,匹配成功;如果不相同,看spring容器中bean的id对应的类型是否与@Resource要注解的那个变量属性对应的类型是否相等,若相等,匹配成功,若不相等,匹配失败。如果@Resource注解括号中的name属性不为空,看name的属性值和容器中的bean的id名是否相等,如相等,则匹配成功;如不相等,则匹配失败。
- 推荐使用:@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅。
进一步可以参考博客: https://www.cnblogs.com/szlbm/p/5512931.html
本文详细介绍了Spring MVC框架中常用注解的功能与使用方法,包括@Controller、@RequestMapping、@RequestParam、@PathVariable、@RequestHeader、@RequestBody、@Autowired与@Resource等,帮助读者深入理解Spring MVC的工作原理。
894

被折叠的 条评论
为什么被折叠?



