Java高级---Spring Boot---6Web开发

6Web开发

6.1 Spring MVC基础详解

Spring MVC 是 Spring 框架的核心模块之一,用于构建灵活、易于测试的 Web 应用程序。

  • DispatcherServlet:

    • 作为前端控制器,它是应用程序的中心入口点。
    • 负责将请求路由到对应的处理器(Controller)。
  • @Controller:

    • 标记在类上,表示该类是一个 MVC 控制器。
    • 控制器中的方法通常响应具体的 HTTP 请求。
  • @RequestMapping:

    • 用于将 HTTP 请求映射到控制器的处理方法。
    • 可以指定请求的 URL、方法(GET、POST 等)。
  • ModelAndView:

    • 用于在控制器和视图之间传递数据。
    • 可以添加属性到模型中,这些属性可以在视图模板中访问。
  • ViewResolver:

    • 用于将逻辑视图名解析为具体的视图实现。
    • Spring MVC 提供了多种视图技术的支持,如 Thymeleaf(用过的)、JSP、FreeMarker 等。

案例: 创建一个简单的 MVC 控制器

java 复制代码
@Controller
public class MyController {

    @GetMapping("/hello")
    public ModelAndView hello() {
        ModelAndView modelAndView = new ModelAndView("helloTemplate");
        modelAndView.addObject("message", "Hello, Spring MVC!");
        return modelAndView;
    }
}

在这个例子中,@GetMapping("/hello") 注解将 HTTP GET 请求 /hello 映射到 hello 方法。该方法创建了一个 ModelAndView 对象,添加了一条消息到模型中,并指定了视图模板 helloTemplate

6.2 RESTful API开发详解

RESTful API 是一种设计风格,它定义了客户端和服务器交互的约束,使得 API 更加轻量、灵活。

  • @RestController:

    • 用于标记 REST 控制器类。
    • @Controller 类似,但所有响应方法的返回值都直接作为 HTTP 响应体。
  • @RequestMapping:

    • 在 RESTful 控制器中,通常使用 @RequestMapping 来映射请求到处理方法。
    • 可以通过 method 属性指定支持的 HTTP 方法。

案例: 创建一个 RESTful 服务

java 复制代码
@RestController
@RequestMapping("/api/users")
public class UserController {

    @GetMapping("/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        User user = findUserById(id); // 假设这个方法从数据库中获取用户信息
        if (user == null) {
            return ResponseEntity.notFound().build();
        }
        return ResponseEntity.ok(user);
    }
}

在这个例子中,@RestController@RequestMapping("/api/users") 注解定义了一个 REST 控制器,它处理 /api/users 路径下的请求。@GetMapping("/{id}") 映射 GET 请求到 getUser 方法,该方法根据用户 ID 获取用户信息,并使用 ResponseEntity 来构建响应。

6.3 异常处理详解

异常处理是 Web 应用程序中不可或缺的一部分,Spring MVC 提供了灵活的异常处理机制。

  • @ControllerAdvice:

    • 用于创建全局异常处理类。
    • 可以应用 @ExceptionHandler, @ResponseStatus 等注解来处理异常。
  • @ExceptionHandler:

    • 用于处理特定的异常类型。
    • 可以返回错误信息、状态码或者自定义响应。

案例: 全局异常处理

java 复制代码
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<?> handleResourceNotFound(Exception ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
    }
    
    @ExceptionHandler(Exception.class)
    public ResponseEntity<?> handleAllExceptions(Exception ex, WebRequest request) {
        // 可以记录日志等操作
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An error occurred");
    }
}

在这个例子中,@ControllerAdvice 注解标记了一个全局异常处理类,@ExceptionHandler 注解用于捕获并处理特定的异常类型。

6.4 数据验证详解

数据验证是确保应用程序接收到的数据是有效和符合预期的。

  • @Valid:

    • 用于标记需要验证的 Bean。
    • 可以与分组验证一起使用,指定验证的组。
  • BindingResult:

    • 用于获取验证错误信息。
    • 可以检查是否有错误,并获取具体的错误信息。

案例: 数据验证

java 复制代码
@PostMapping("/users")
public ResponseEntity<?> createUser(@Valid @RequestBody User user, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        Map<String, String> errors = new HashMap<>();
        bindingResult.getAllErrors().forEach(error -> errors.put(error.getObjectName(), error.getDefaultMessage()));
        return ResponseEntity.badRequest().body(errors);
    }
    // 保存用户信息
    // ...
    return ResponseEntity.ok().build();
}

在这个例子中,@Valid 注解确保了 User 对象在绑定到方法参数之前会被验证。如果存在验证错误,BindingResult 将包含这些错误,然后可以构建一个包含错误信息的响应。

通过这些详细的解释和案例,我们可以看到 Spring MVC 提供了一套全面的机制来支持 Web 应用程序的开发,从基础的 MVC 结构到 RESTful API 设计,再到异常处理和数据验证,都体现了 Spring MVC 的强大和灵活性。

相关推荐
唐青枫11 小时前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马12 小时前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户37215742613512 小时前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户37215742613513 小时前
Java 打印 Word 文档:从基础打印到高级设置
java
用户3521802454751 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
昵称为空C1 天前
手撸一个动态 SQL 执行引擎:不重启服务,在线增删改查任意数据库
spring boot·后端
东坡白菜1 天前
破局全栈:一个前端开发的Java入门实战记录(1)
java·全栈
唐青枫1 天前
Java Tomcat 实战指南:从 Servlet 容器到 Spring Boot 部署
java
wsaaaqqq1 天前
roudan:自由选择实体、灵活操作数据、快速写入数据库的 Java 框架
java
plainGeekDev1 天前
null 判断 → Kotlin 可空类型
android·java·kotlin