作用:把请求中指定名称的参数给控制器中的形参赋值。
属性:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>常用注解的使用</title>
</head>
<body>
<a href="/anno/testRequestParam?name=hehe">RequestParam</a>
</body>
</html>
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam("name") String username){
System.out.println(username);
return "success";
}
}
作用:用于获取请求体内容,直接使用得到的是key=value&key=value...结构的数据。get请求方式不适用。
属性:required,是否必须有请求体,默认是true,当取值为true时,get方式会报错,如果为false,get请求得到的是null。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>常用注解的使用</title>
</head>
<body>
<form action="/anno/testRequestBody" method="post">
用户姓名:<input type="text" name="username"><br>
用户年龄:<input type="text" name="password"><br>
<input type="submit" value="提交">
</form>
</body>
</html
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body){
System.out.println(body);
return "success";
}
}
作用:用于绑定url中的占位符,例如:请求url中/delete/{id},这个{id}就是url的一个占位符。
属性:
restful编程风格:描述了一个架构样式的网络系统,比如web应用程序。HTTP协议是一种无状态的协议,即所有的状态都保存在服务器端,因此,如果客户端想要操作这样的服务器,必须通过某种手段,让服务器发生状态转换,而这种转换是建立在表现层(把资源具体呈现出来的形式)之上的,所以就是表现层状态转换。具体说,就是HTTP协议中,四个表示操作的动词:GET,POST,PUT,DELETE。它们分别对应四个基本操作:GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源。
restful的示例:
/account/1
,HTTP GET:获取id=1的account/account/1
,HTTP DELETE:删除id=1的account/account/1
,HTTP PUT:更新id=1的account/account
,HTTP POST:新增account<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>常用注解的使用</title>
</head>
<body>
<a href="/anno/testPathVariable/10">testPathVariable</a>
</body>
</html>
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("/testPathVariable/{sid}") //sid和下面PathVariable的参数必须一致
public String testPathVariable(@PathVariable("sid") String id){
System.out.println(id);
return "success";
}
}
作用:用于获取请求头
属性:
@RequestHeader(value="Accept")
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>常用注解的使用</title>
</head>
<body>
<a href="/anno/testRequestHeader">testRequestHeader</a>
</body>
</html>
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Accept") String header){
System.out.println(header);
return "success";
}
}
作用:用于把指定cookie名称的值传入控制器方法参数。
属性:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>常用注解的使用</title>
</head>
<body>
<a href="/anno/testCookieValue">testCookieValue</a>
</body>
</html>
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String cookie){
System.out.println(cookie);
return "success";
}
}
作用:出现在方法上,表示当前方法会在控制器的方法执行之前先运行,它可以修饰没有返回值的方法,也可以修饰有返回值的方法。出现在参数上,获取指定的数据给当前参数赋值。
属性:value用于获取数据的key,key可以是POJO的属性名称,也可以是map结构的key。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>常用注解的使用</title>
</head>
<body>
<form action="/anno/testModelAttribute" method="post">
用户姓名:<input type="text" name="uname"><br>
用户年龄:<input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
//有返回值的方式
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("testModelAttribute")
public String testModelAttribute(User user){
System.out.println(user);
System.out.println("testModelAttribute执行了");
return "success";
}
@ModelAttribute
public User showUser(String uname){//提交表单不完整时使用
User user =new User();
user.setUname(uname);
user.setAge(20);
user.setDate(new Date());
System.out.println("showUser执行了");
return user;
}
}
//无返回值的方式
package com.example.controller;
import com.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.Map;
@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("testModelAttribute")
public String testModelAttribute(@ModelAttribute("abc") User user){
System.out.println(user);
System.out.println("testModelAttribute执行了");
return "success";
}
@ModelAttribute //注意:获取前端的参数,必须和标签的name属性一致
public void showUser(String uname, Map<String,User> map) {//提交表单不完整时使用
User user = new User();
System.out.println(uname);
user.setUname(uname);
user.setAge(20);
user.setDate(new Date());
map.put("abc",user);
}
}
作用:用于多次执行控制器方法间的参数共享,该注解只能作用在类上。
属性:
package com.example.controller;
import com.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@Controller
@RequestMapping("/anno")
@SessionAttributes(value = {"msg"})
public class AnnoController {
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Model model){ //Model中存储数据实际上放入request域中
model.addAttribute("msg","消息123");
return "success";
}
@RequestMapping("/getSessionAttributes")
public String getSessionAttributes(ModelMap model){ //Model中存储数据实际上放入request域中
String msg = (String) model.get("msg");
System.out.println(msg);
return "success";
}
@RequestMapping("/delSessionAttributes")
public String delSessionAttributes(SessionStatus status){ //删除session的内容
status.setComplete();
return "success";
}
}
<!--发送请求-->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>常用注解的使用</title>
</head>
<body>
<a href="/anno/testSessionAttributes">testSessionAttributes</a>
<a href="/anno/getSessionAttributes">getSessionAttributes</a>
<a href="/anno/delSessionAttributes">delSessionAttributes</a>
</body>
</html>
<!--获取session中的值-->
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>成功</h3>
${msg}
${sessionScope}
</body>
</html>
原文:https://www.cnblogs.com/acknowledge/p/14324545.html