目录

简介

Bean加载控制

设置请求映射路径

5种请求类型参数传递

JSON数据传递请求参数

响应

Jackson库处理JSON响应

REST风格

RESTful快速开发

拦截器


简介

Spring MVC是一个强大而灵活的Web应用程序框架,它通过使用MVC架构模式、注解和配置文件来实现请求的分发和处理。它具有丰富的功能和特性,使开发者能够快速构建可靠和高效的Web应用程序。

在Spring MVC中,请求由前端控制器(Front Controller)负责接收并将其分发给适当的处理程序。该处理程序可以是一个方法、一个类或者一个注解控制器。处理程序负责处理请求,并生成一个模型对象来保存数据,然后选择适当的视图来呈现数据给用户。视图可以是JSP页面、HTML页面、JSON、XML或者其他格式。

Bean加载控制

Spring MVC框架使用IoC容器来管理和加载Bean。我们可以通过在配置文件中定义Bean,或使用注解标记Bean来实现加载控制。例如,使用@Controller注解标记一个类为控制器Bean,使用@Service注解标记一个类为服务Bean。

设置请求映射路径

在Spring MVC中,我们可以使用@RequestMapping注解来设置请求URL和处理程序方法之间的映射关系。例如,@RequestMapping("/hello")表示处理程序方法将处理以"/hello"开头的所有请求。

5种请求类型参数传递

Spring MVC支持五种类型的参数传递方式:

  • 路径变量(Path Variables):使用@PathVariable注解从URL路径中提取参数。
  • 请求参数(Request Parameters):使用@RequestParam注解从请求中获取参数。
  • 请求体参数(Request Body Parameters):使用@RequestBody注解将请求体转化为Java对象。
  • 请求头参数(Request Header Parameters):使用@RequestHeader注解获取请求头中的参数。
  • Cookie参数(Cookie Parameters):使用@CookieValue注解获取Cookie中的参数。

JSON数据传递请求参数

在Spring MVC中,我们可以使用@RequestBody注解将接收到的JSON数据转化为Java对象。

举例:

@PostMapping("/user")
public void createUser(@RequestBody User user) {
    // 处理接收到的User对象
}

响应

Spring MVC支持多种类型的响应,包括HTML、JSON、XML等。我们可以使用不同的视图解析器来选择合适的视图类型。例如,InternalResourceViewResolver用于解析JSP页面视图,MappingJackson2JsonView用于生成JSON响应。

Jackson库处理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<HttpMessageConverter<?>> 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风格

REST(Representational State Transfer)是一种基于HTTP协议的网络应用程序架构风格。它使用标准的HTTP方法(如GET、POST、PUT、DELETE)来对资源进行操作,并通过URL来唯一标识资源。Spring MVC可以很好地支持REST风格的开发。

RESTful快速开发

使用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("/**");
    }
}
02-08 23:38