Spring MVC
是Spring框架的一部分,它提供了一个基于MVC(模型-视图-控制器)设计模式的Web应用程序开发框架。通过将应用程序划分为模型、视图和控制器三个核心组件,Spring MVC简化了Web开发过程,提高了代码的可读性、可维护性和可扩展性。它支持灵活的配置和强大的注解功能,能够无缝地与Spring框架的其他部分集成,从而构建高性能、易于测试和维护的Web应用程序。
SpringMVC 中的常用注解及其用法
1. 控制器层
@Controller
标识一个类为 Spring MVC 控制器。这个类中的方法将处理HTTP请求。
@Controller
public class MyController {
...
}
@RequestMapping:
映射HTTP请求的URL到一个具体的处理方法。它可以用于类级别和方法级别。
类级别用法:
@Controller @RequestMapping("/example") public class MyController { ... }
方法级别用法:
@Controller @RequestMapping("/MyController") public class MyController { @RequestMapping("/hello") public String hello() { ... } }
@RestController:
它将 @Controller 和 @ResponseBody 的功能合并在一起。
使用 @RestController 注解的类被视为控制器(Controller),并且其所有方法的返回值都会自动地作为 HTTP 响应体(Body)返回给客户端
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; // 使用 @RestController 注解标记该类为 RESTful 控制器 @RestController public class UserController { // 假设有一个服务层来处理业务逻辑 // private UserService userService; // 定义一个 GET 请求处理方法,用于根据用户ID获取用户信息 @GetMapping("/users/{id}") public User getUserById(@PathVariable Long id) { // 这里应该是调用服务层来获取用户信息 // 例如:User user = userService.findById(id); // 为了简化示例,我们直接返回一个模拟的 User 对象 // 在实际应用中,你应该从数据库或其他数据源中获取 User 对象 User user = new User(); user.setId(id); user.setName("John Doe"); user.setEmail("john.doe@example.com"); // 由于使用了 @RestController,返回的 User 对象将自动转换为 JSON // 并作为 HTTP 响应体发送给客户端 return user; } // 假设的 User 类,用于模拟用户信息 static class User { private Long id; private String name; private String email; // 省略了构造函数、getter 和 setter 方法以简化示例 } }
在这个例子中,UserController 类使用 @RestController 注解标记为 RESTful 控制器。它定义了一个 getUserById 方法,该方法使用 @GetMapping 注解来映射 HTTP GET 请求到 /users/{id} 路径。方法接收一个路径变量 id,并返回一个 User 对象。由于使用了 @RestController,Spring MVC 会自动将返回的 User 对象转换为 JSON 格式的字符串,并将其作为 HTTP 响应体发送给客户端。这样,客户端就可以接收到一个包含用户信息的 JSON 对象。
@RequestParam:后端参数重命名
@RequestMapping("/greet")
public String getUser(@RequestParam(value = "user_id", required = false) Long userId) {
...
return "User ID is: " + userId;
}
在上面的例子中,
@RequestParam(value = "user_id", required = false)
告诉Spring MVC,应该查找请求中的user_id
参数,并将其值绑定到名为userId
的方法参数上。如果请求中没有user_id
参数,并且required
属性被设置为false
,则userId
参数将为null
(或者对于基本类型,如果你没有提供默认值或使用包装类型,则可能会抛出异常)。
@PathVariable:接收路径参数
@RequestMapping("/user/{id}")
public String getUserById(@PathVariable("id") Long userId) {
...
}
在这个例子中,
/user/{id}
定义了一个 URL 模板,其中{id}
是一个变量。当请求匹配这个模板时,{id}
的值将被捕获,并通过@PathVariable("id")
注解绑定到userId
参数上
2. 服务层(Service)注解
@Service:标识一个类为服务层的组件。服务层通常包含应用程序的业务逻辑。
用法:
@Service
public class MyService {
...
}
3. 数据访问层(Repository)注解
@Repository:表示持久层的注解,用于标识数据访问组件。
用法:
@Repository
public class MyRepository {
...
}
4. 请求参数相关注解
@RequestBody:
指示方法返回的对象应该直接写入HTTP响应体中。通常用于接收JSON或XML格式的数据。
@RequestMapping("/data")
@ResponseBody
public Map<String, Object> getData() {
...
}
@SessionAttribute:
从Session中获取值
@RequestHeader:
从Header中获取值
Cookie和Session
Cookie 和Session都是会话机制, Cookie是客⼾端机制, Session是服务端机制.⼆者通过SessionId来关联.Spring MVC内置HttpServletRequest, HttpServletResponse两个对象.需要使⽤时, 直接在⽅法中添加对应参数即可,Cookie和Session可以从HttpServletRequest中来获取, 也可以直接使⽤HttpServletResponse设置Http响应状态码