Spring MVC基础整理

深海里的光 2024-02-19 ⋅ 22 阅读

1. 请求参数接收处理

Spring MVC提供多种方式来接收请求参数,包括:

  • @RequestParam注解:用于接收请求参数,可以设置参数的名称、是否必需、默认值等。
@GetMapping("/user")
public String getUser(@RequestParam("id") Long userId) {
    // 处理请求参数
    return "user";
}
  • @PathVariable注解:用于接收路径变量,可以在路径中直接使用变量。
@GetMapping("/user/{id}")
public String getUser(@PathVariable("id") Long userId) {
    // 处理路径变量
    return "user";
}
  • 对象绑定:可以将请求参数直接绑定到对象上。
@PostMapping("/user")
public String addUser(User user) {
    // 处理请求参数绑定到对象上
    return "user";
}

2. 响应

Spring MVC支持多种方式返回响应结果,包括:

  • 返回视图名称:Spring MVC会根据视图名称找到对应的视图模板进行渲染。
@GetMapping("/user")
public String getUser(ModelMap model) {
    User user = userService.getUser();
    model.addAttribute("user", user);
    return "user";
}
  • 返回JSON数据:可以使用@ResponseBody注解将返回结果直接封装成JSON格式进行响应。
@GetMapping("/user")
@ResponseBody
public User getUser() {
    return userService.getUser();
}
  • 返回自定义响应:可以使用ResponseEntity对象封装自定义的响应。
@GetMapping("/user")
public ResponseEntity<User> getUser() {
    User user = userService.getUser();
    return new ResponseEntity<>(user, HttpStatus.OK);
}

3. 拦截器

拦截器在请求处理过程中起到拦截、处理、转发请求的作用。Spring MVC提供了HandlerInterceptor接口来实现拦截器。

public class AuthInterceptor extends HandlerInterceptorAdapter {

    @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 AppConfig implements WebMvcConfigurer {

    @Autowired
    private AuthInterceptor authInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authInterceptor)
                .addPathPatterns("/api/**")
                .excludePathPatterns("/api/login");
    }
}

4. 上传文件

Spring MVC提供了文件上传的功能,可以通过@RequestParam注解来接收上传的文件。

@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
    // 处理上传的文件
    return "upload";
}

配置文件上传的临时目录和大小限制:

@Configuration
public class AppConfig implements WebMvcConfigurer {
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/uploads/**")
                .addResourceLocations("file:/path/to/uploads/");
    }
    
    @Override
    public void configureMaxUploadSize(MaxUploadSizeConfigurer configurer) {
        configurer.setMaxUploadSize(10485760); // 10MB
        configurer.setMaxUploadSizePerFile(1048576); // 1MB
        configurer.setMaxInMemorySize(4096); // 4KB
    }
}

5. 异常处理

Spring MVC提供了统一的异常处理机制,可以通过@ExceptionHandler注解来处理指定的异常。

@ControllerAdvice
public class GlobalExceptionHandler {
    
    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception e) {
        // 处理异常
        return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

结语

Spring MVC是一个功能强大的MVC框架,提供了丰富的功能和组件来简化Web开发。本文对Spring MVC的请求参数接收处理、响应、拦截器、上传文件、异常处理进行了基础整理。希望对你的学习和实践有所帮助。

参考链接:


全部评论: 0

    我有话说: