1、注解
1)、@Controller
1、代表这个类会被spring托管
2、被这个注解的类中的所有方法、如果返回值是string类型,并有指定页面跳转,会被视图解析器解析
用法:
@Controller
public class ControllerTest01 {
@RequestMapping("/h1")
public String test1(Model model){
model.addAttribute("msg","调用了test1方法");
return "test1";
}
}
2)、@RequestMapping
在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,
相当于Servlet中在web.xml中配置
<servlet>
<servlet-name>servletName</servlet-name>
<servlet-class>ServletClass</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletName</servlet-name>
<url-pattern>url</url-pattern>
</servlet-mapping>
用法:
@Controller
public class ControllerTest02 {
@RequestMapping("/hu/t2")
public String test02(Model model){
model.addAttribute("msg","调用了test02方法");
return "test1";
}
}
3)、@PathVariable
通过 @PathVariable 可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariable(“xxx“)
@RequestMapping(value=”user/{id}/{name}”)
用法:
@Controller
public class ControllerTest03 {
/*
* RestFul风格
* */
@RequestMapping("/test03/h2/{a}/{b}")
public String test04(@PathVariable int a, @PathVariable int b, Model model) {
int rs = a + b;
model.addAttribute("msg", "结果:" + rs);
return "test1";
}
}
/*
* http://localhost:8080/test03/h2/1/2
* */
4)、@PostMapping和@GetMapping
1、@PostMapping
作用:post请求
2、@GetMapping
作用:get请求
5)、@RequestParam
@RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
如果参数是一个对象
直接按照对象属性进行匹配赋值
@Controller
public class ControllerTest04 {
@GetMapping("/test04/t1")
public String test01(@RequestParam String name){
System.out.println(name);
return "test1";
}
}
/*
* http://localhost:8080/test04/t1?name=老大
* http://localhost:8080/test04/t1?name1111=老大 报错 必须为name
* */
6)、@ResponseBody
加上这个注解后不走视图解析器直接返回字符串
7)、@RestController
指定这个类下的所有方法返回字符串、不走视图解析器
2、乱码解决
在web.xml使用过滤器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3、json
1)、js对象和json互转
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script type="text/javascript">
const user = {
name: '老大',
age: 20,
sex: '男'
}
/*
* 将js对象转换为json对象
* */
let json = JSON.stringify(user);
console.log(json)
/*
* 将json对象转换为js对象
* */
let obj = JSON.parse(json);
console.log(obj)
</script>
</body>
</html>
2)、返回json数据
1、依赖
jackson-databind或者fastjson
2、导入jar包后要在lib目录中增加jar包
3、@ResponseBody
加上这个注解后不走视图解析器直接返回字符串
3)、json乱码解析
第一种:
@RequestMapping(value = "/j1",produces = "application/json;charset=UTF-8")
第二种:
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 注解请求映射
默认是ISO-88859-1,避免乱码这里设置为UTF-8 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/html;charset=UTF-8" />
</bean>
<!-- 启动JSON格式的配置,自动将格式转换成JSON格式,不需要其他类 -->
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter>
<property name="supportedMediaTypes" value="application/json;charset=UTF-8" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>