spring-mvc简介
spring-mvc是一个实现了mvc设计模式的web框架,mvc将web应用分为m(model)、v(view)、c(controller)三层来实现职责隔离,使得web开发更加便捷。mcv的结构划分如下图
- 视图:负责跟客户端(浏览器)的交互,比如资源展示、数据填写、提交等等。
- 控制器:负责将用户请求正确的交给模型层处理,然后返回处理结果,用户可能是视图层或外部系统等。
- 模型:负责处理具体的业务逻辑、和数据库交互等。
下面主要对控制器层的一些常用点展开叙述。
springboot中的controller
我们知道传统的springMVC在项目构建初期需要做一些手动配置,如果在springboot构建时引入了"spring-boot-starter-web",那么就默认配置好了mvc,可以直接使用,如下代码
@RestController //告诉框架这是一个controller
@RequestMapping("/first") //controller的path
public class FirstController {
@GetMapping("/test1") //告诉框架这是一个get接口方法,且path是"/test",
public String tset1(){
return "test1";
}
}
启动应用,在浏览器访问:http://localhost:8080/first/test1 浏览器将输出“test1”。
消息转换器
springMVC使用HttpMessageConverter对http请求报文和响应报文进行转换,比如将请求json转为对象,将响应对象转json,springboot默认使用jackjson进行报文转换。
在接口方法的对象参数前使用@RequestBody注解,系统会将json数据按属性名称一一对应的写到请求参数对对象。
在接口方法上使用@ResponseBody注解,系统会将响应报文转为json字符串,@RestController包含了@ResponseBody注解,使用了@RestController可不用重复使用@ResponseBody。
@PostMapping("/test2")
public void test2(@RequestBody Student student){
System.out.println(student);
}
@GetMapping("/test3")
public Student test3(){
Student student = new Student();
student.setName("张三");
student.setAge(11);
return student;
}
跨域的支持
在controller上使用@CrossOrigin注解,可以支持跨域,如要配置全局的跨域支持,需自定义配置类,代码如下
@Configuration(proxyBeanMethods = false)
public class MyCorsConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**");
}
};
}
}