暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SpringMVC 14 常用注解

敲代码的人 2019-10-10
276

@RequestParam

作用:把请求中指定名称的参数给控制器中的形参赋值。校正参数

属性:value:请求参数中的名称。

required:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如果不提供将报错。如果改为false,可以不提供


测试:

    @RequestMapping(value = "test_RequestParam")
public String test_RequestParam(@RequestParam("name")String username){
System.out.println("username = " + username);
return null;
}
复制

请求路径及参数


@RequestBody

作用1:用于获取请求体内容。直接使用得到是key=value&key=value...结构的数据。

作用2:用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为java对象并绑定到Controller方法的参数上.(注意,此方法需要开启转换器,及引入Jackson坐标)

属性:required:是否必须有请求体。默认值是:true。当取值为true时,get请求方式会报错。如果取值为false,get请求得到是null。get请求方式不适用。


测试1:

<form action="test01/test_RequestBody.do" method="post">
姓名:<input type="text" name = "name"/><br>
年龄:<input type="text" name = "age"/><br>
<input type="submit" value="注册"/>
</form>
复制
    @RequestMapping(value = "test_RequestBody")
public String test_RequestBody(@RequestBody String body){
System.out.println("body = " + body);
return "show";
}
复制


测试2:前端准备json格式的数据

<script>
$(function () {
$("button").click(function () {
$.ajax({
                url:"test01/test_RequestBody2.do",
                data:'{"name":"langlihuge","age":12}',
type : "post",
contentType:'application/json;charset=utf-8',
                dataType:"json",
success :function (request) {
                    alert(request.name + "  ," + request.age);
}
})
})
})
</script>
复制
    @RequestMapping(value = "test_RequestBody2")
@ResponseBody
public Student test_RequestBody2(@RequestBody Student student){
System.out.println("student = " + student);
return student;
}
复制

注意:


@RequestHeader

作用:用于获取请求消息头。

属性:value:提供消息头名称 required:是否必须有此消息头


测试:

    @RequestMapping(value = "test_RequestHeader")
public String test_RequestHeader(@RequestHeader(value = "Accept-Language") String requestHeader){
System.out.println("requestHeader = " + requestHeader);
return "show";
}
复制



@CookieValue

作用:用于把指定cookie名称的值传入控制器方法参数。 

属性:value:指定cookie的名称。required:是否必须有此cookie。


测试

   @RequestMapping(value = "test_CookieValue")
public String test_CookieValue(@CookieValue(value = "JSESSIONID") String cookie){
System.out.println("cookie = " + cookie);
return "show";
}
复制


@ModelAttribute

作用:该注解是SpringMVC4.3版本以后新加入的。它可以用于修饰方法和参数。出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。出现在参数上,获取指定的数据给参数赋值。

属性:value:用于获取数据的key。key可以是POJO的属性名称,也可以是map结构的key。 

应用场景:当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。 

例如:我们在编辑一个用户时,用户有一个创建信息字段,该字段的值是不允许被修改的。在提交表单数据是肯定没有此字段的内容,一旦更新会把该字段内容置为null,此时就可以使用此注解解决问题。


基于POJO属性的基本使用:

<form action="test01/testModelAttribute.do" method="post">
姓名:<input type="text" name = "name"/><br>
年龄:<input type="text" name = "age"/><br>
<input type="submit" value="注册"/>
</form>
复制

    @ModelAttribute
public void shoeModel(Student student){
System.out.println("执行了showModel方法 :"+student.getName());
}


@RequestMapping("/testModelAttribute")
public String testModelAttribute(Student student) {
System.out.println("执行了控制器的方法"+student.getName());
return "show";
}
复制



基于Map的例1:ModelAttribute修饰方法带返回值

<form action="test01/testModelAttribute.do" method="post">
    姓名:<input type="text" name = "name"/><br>
<input type="submit" value="注册"/>
</form>
复制
    @ModelAttribute
public Student shoeModel(String name){
Student stu = new Student();
stu.setName(name);
stu.setAge(23);
System.out.println("执行了showModel方法 :"+stu);
return stu;
}


@RequestMapping("/testModelAttribute")
public String testModelAttribute(Student student) {
System.out.println("执行了控制器的方法"+student);
return "show";
}
复制


基于Map的应用:ModelAttribute修饰方法不带返回值

    @ModelAttribute
public void shoeModel(String name,Map<String,Student> map){
Student stu = new Student();
stu.setName(name);
stu.setAge(23);
System.out.println("执行了showModel方法 :"+stu);
map.put("abc",stu);
}


@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute("abc") Student student) {
System.out.println("执行了控制器的方法"+student);
return "show";
}
复制


@SessionAttribute

作用:用于多次执行控制器方法间的参数共享。

属性:value:用于指定存入的属性名称 type:用于指定存入的数据类型。


测试

<a href="test01/testPut.do">存入SessionAttribute</a> <hr/>
<a href="test01/testGet.do">取出SessionAttribute</a> <hr/>
<a href="test01/testClean.do">清除SessionAttribute</a>
复制


@Controller()
@RequestMapping("/test01")
@SessionAttributes(value ={"username","password"},types={Integer.class})
public class MyController2 {
@RequestMapping("/testPut")
public String testPut(Model model){
model.addAttribute("username", "langlihuge");
model.addAttribute("password","123456");
model.addAttribute("age", 31);
return "show";
}


@RequestMapping("/testGet") public String testGet(ModelMap model){
System.out.println(model.get("username")+";"+model.get("password")+";"+model.get("age"));
return "show";
}


@RequestMapping("/testClean")
public String complete(SessionStatus sessionStatus){ sessionStatus.setComplete();
return "show";
}
复制

注意:之前model数据默认存入request域中,现在存入session域中



喜欢转发

明天见

SpringMVC 13 自定义参数绑定

SpringMVC 12 请求参数返回值 Object

SpringMVC 11 请求参数返回值void

SpringMVC 10 处理器方法的返回值(ModelAndView和String))

SpringMVC 09 请求参数中文乱码问题

SpringMVC 08 请求参数绑定

SpringMVC 07  @RequestMapping说明

SpringMVC 06 注解式开发入门

SpringMVC 05 再解<url pattern/>

SpringMVC 04 执行流程的简单原码分析分析

SpringMVC 03 视图解析器及简述执行流程

SpringMVC 02 概述及配置式入门

SpringMVC 01 前述 三层架构和MVC设计模式


文章转载自敲代码的人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论