目录
简介
Bean加载控制
设置请求映射路径
5种请求类型参数传递
JSON数据传递请求参数
响应
Jackson库处理JSON响应
REST风格
RESTful快速开发
拦截器
Spring MVC是一个强大而灵活的Web应用程序框架,它通过使用MVC架构模式、注解和配置文件来实现请求的分发和处理。它具有丰富的功能和特性,使开发者能够快速构建可靠和高效的Web应用程序。
在Spring MVC中,请求由前端控制器(Front Controller)负责接收并将其分发给适当的处理程序。该处理程序可以是一个方法、一个类或者一个注解控制器。处理程序负责处理请求,并生成一个模型对象来保存数据,然后选择适当的视图来呈现数据给用户。视图可以是JSP页面、HTML页面、JSON、XML或者其他格式。
Spring MVC框架使用IoC容器来管理和加载Bean。我们可以通过在配置文件中定义Bean,或使用注解标记Bean来实现加载控制。例如,使用@Controller
注解标记一个类为控制器Bean,使用@Service
注解标记一个类为服务Bean。
在Spring MVC中,我们可以使用@RequestMapping
注解来设置请求URL和处理程序方法之间的映射关系。例如,@RequestMapping("/hello")
表示处理程序方法将处理以"/hello"开头的所有请求。
Spring MVC支持五种类型的参数传递方式:
@PathVariable
注解从URL路径中提取参数。@RequestParam
注解从请求中获取参数。@RequestBody
注解将请求体转化为Java对象。@RequestHeader
注解获取请求头中的参数。@CookieValue
注解获取Cookie中的参数。在Spring MVC中,我们可以使用@RequestBody
注解将接收到的JSON数据转化为Java对象。
举例:
@PostMapping("/user")
public void createUser(@RequestBody User user) {
// 处理接收到的User对象
}
Spring MVC支持多种类型的响应,包括HTML、JSON、XML等。我们可以使用不同的视图解析器来选择合适的视图类型。例如,InternalResourceViewResolver
用于解析JSP页面视图,MappingJackson2JsonView
用于生成JSON响应。
1.添加Jackson依赖: 在项目的Maven或Gradle配置文件中,确保已添加Jackson库的依赖项。
2.启用注解驱动: 在Spring MVC配置类上添加@EnableWebMvc
注解,以启用注解驱动的Spring MVC功能。
3.配置Jackson转换器: 在Spring MVC配置类中添加MappingJackson2HttpMessageConverter
作为消息转换器。这将告诉Spring MVC使用Jackson库来处理JSON响应。
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List> converters) {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converters.add(converter);
}
}
4.测试JSON响应: 使用控制器方法返回一个Java对象,并使用@ResponseBody
注解将其转换为JSON响应。
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public User getUser(@PathVariable("id") int id) {
// 从数据库或其他数据源获取用户信息
User user = userService.getUserById(id);
return user;
}
}
REST(Representational State Transfer)是一种基于HTTP协议的网络应用程序架构风格。它使用标准的HTTP方法(如GET、POST、PUT、DELETE)来对资源进行操作,并通过URL来唯一标识资源。Spring MVC可以很好地支持REST风格的开发。
使用Spring MVC,我们可以轻松地开发RESTful Web服务。通过合理地设计请求路径和使用适当的HTTP方法,我们可以实现资源的增删改查操作。
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public User getUser(@PathVariable("id") int id) {
// 根据id查询用户
}
@PostMapping
public void createUser(@RequestBody User user) {
// 创建用户
}
@PutMapping("/{id}")
public void updateUser(@PathVariable("id") int id, @RequestBody User user) {
// 更新用户信息
}
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable("id") int id) {
// 删除用户
}
}
在Spring MVC中,我们可以使用拦截器(Interceptor)来拦截请求并进行相应的处理。拦截器可以用于实现认证、日志记录、异常处理等功能。拦截器可以在处理程序方法执行前后进行预处理和后处理。我们可以通过实现HandlerInterceptor
接口来创建自定义拦截器,并在配置文件中进行配置。
举例:
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在处理程序方法执行前进行预处理
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 在处理程序方法执行后进行后处理
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 在视图渲染完成后进行清理工作
}
}
在配置文件中配置拦截器:
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Autowired
private MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor).addPathPatterns("/**");
}
}