Interceptors :: Spring Frameworkhttps://docs.spring.io/spring-framework/reference/web/webmvc/mvc-config/interceptors.html
注解
1. @RequestMapping("/sc")
2. RequestParam
- value:参数名 可以不加
- required:是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常
- defaultValue: 默认值,当没有传递参数时使用该值
http://localhost:8080/param/testParam?username=ww&password=sss
@GetMapping("/testParam")
public String testParam(@RequestParam String username, String password) {
System.out.println("actuator");
System.out.println("用户名:" + username);
System.out.println("密码:" + password);
return "success";
}
password 也可以传递过来
3. PathVariable
映射 URL 绑定的占位符
@PathVariable(required = false) 为false 则为null
@GetMapping(value = "/testPathVariable/{sid}")
public Map testPathVariable(@PathVariable String sid) {
HashMap<String, String> stringStringHashMap = new HashMap<>();
stringStringHashMap.put("sid",sid);
return stringStringHashMap;
}
4. RequestBody
@PostMapping("/bean")
public Account bean(@RequestBody Account account) {
return account;
}
5. RequestHeader
@RequestMapping(value="/testRequestHeader")
public String testRequestHeader(@RequestHeader("Accept") String header) {
return header;
}
6. session
@GetMapping(value = "/testSessionAttributes")
public ResultVO<Object> testSessionAttributes( HttpSession session) {
session.setAttribute("msg","dd");
return ResultUtils.resultSuccess(ResultEnumsInfo.SUCCESS);
}
@GetMapping(value = "/getSessionAttributes")
public String getSessionAttributes(HttpSession session) {
Object msg = session.getAttribute("msg");
return (String) msg;
}
@DeleteMapping(value = "/delSessionAttributes")
public String delSessionAttributes(HttpSession session) {
session.removeAttribute("msg");
return "success";
}
7. CookieValue
@GetMapping(value = "/testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String cookieValue) {
System.out.println(cookieValue);
return cookieValue;
}
8. ModelAttribute
- 出现在方法上,表示当前方法会在控制器的方法执行之前先执行。它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。
- 属性: value:用于获取数据的 key。key 可以是 POJO 的属性名称,也可以是 map 结构的 key。
- 应用场景 当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。例如: 我们在编辑一个用户时,用户有一个创建信息字段,该字段的值是不允许被修改的。在提交表单数据是肯定没有此字段的内容 一旦更新会把该字段内容置为 null,此时就可以使用此注解解决问题。
@RestController
public class ModelAttributeTest {
/**
* 无参测试
*
* @param user
*/
@ModelAttribute
public void showModel(User user) {
System.out.println("执行了 showModel 方法" + user.getUsername());
}
@PostMapping("/testModelAttribute/no")
public String testModelAttribute(User user) {
System.out.println("执行了控制器的方法" + user.getUsername());
return "success";
}
/***************************************************************************************************/
/**
* 有参
* @param uname
* @param map
*/
@ModelAttribute
public void showUser(String uname, Map<String, User> map) {
System.out.println("showUser执行了...");
// 通过用户查询数据库(模拟)
User user = new User();
user.setUsername(uname);
user.setAge(20);
user.setDate(new Date());
map.put("abc", user);
}
@PostMapping(value = "/testModelAttribute")
public String testModelAttributeyes(@ModelAttribute("abc") User user) {
System.out.println("testModelAttribute执行了...");
System.out.println(user);
return "success";
}
}
url 中特殊字符
字符 | 名称 | 16进制值 |
+ | URL中的+表示空格 | %2B |
空格 | URL中的空格可以用+号或者编码 | %20 |
/ | 分割目录和子目录 | %2F |
? | 分隔实际的URL和字符 | %3F |
% | 指定特殊字符 | %25 |
# | 表示书签,URL传输参数时会自动截断#后面内容 | %23 |
& | URL中的参数分隔符 | %26 |
= | UEL中指定的参数值 | %3D |
常见问题
1. Springboot用@PathVariable传参,最后一个参数小数点(.)后面数据丢失问题
@RequestMapping("/v2/users/{email:.+}")