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 的强大和灵活性。

相关推荐
自由与自然1 分钟前
乐观锁与悲观锁的使用场景
java·服务器·数据库
呆萌很4 分钟前
基于 Spring Boot 瑞吉外卖系统开发(三)
spring boot
小付同学呀1 小时前
前端快速入门——JavaScript变量、控制语句
开发语言·前端·javascript
愚润求学2 小时前
【C++】list模拟实现
开发语言·数据结构·c++·list
爱的叹息3 小时前
spring mvc 中 RestTemplate 全面详解及示例
java·spring·mvc
专注VB编程开发20年4 小时前
写.NET可以指定运行SUB MAIN吗?调用任意一个里面的类时,如何先执行某段初始化代码?
开发语言·vb.net
仙人掌_lz5 小时前
利用python从零实现Byte Pair Encoding(BPE):NLP 中的“变形金刚”
开发语言·python·gpt·自然语言处理·llm·token·deepseek
q567315235 小时前
使用Alamofire下载网站首页内容
开发语言·爬虫·python·scrapy·golang
Aerkui6 小时前
Python标准库-copy
开发语言·python
刚入门的大一新生6 小时前
C++初阶-C++的讲解1
开发语言·c++