1、页面跳转: (1)返回值void类型形式 (2)返回字符串形式 (3)返回ModelAndView对象 (4)向request域存储数据 2、回写数据: (1)直接返回字符串 导入jackson-core、jackson-databind、jackson-annotations依赖 (2)返回对象或集合 需要代码和运行结果
时间: 2025-06-25 22:02:56 浏览: 9
### Spring MVC 中页面跳转和回写数据的方式
#### 1. 页面跳转的返回值类型
Spring MVC 支持多种页面跳转方式,主要包括以下几种:
- **返回字符串**
控制器方法可以返回一个视图名称(String 类型),框架会根据配置好的视图解析器自动拼接成完整的视图路径并渲染页面。如果需要传递模型数据到视图,则可以通过 `Model` 或者 `Map` 来实现。
```java
@Controller
public class TestController {
@RequestMapping("/jumpWithString")
public String jumpWithString(Model model) {
model.addAttribute("message", "这是通过字符串返回的页面");
return "resultPage"; // 假设 resultPage 对应的是 /WEB-INF/views/resultPage.jsp
}
}
```
运行结果:浏览器访问 `/jumpWithString` 后,页面显示 `${message}` 的值为“这是通过字符串返回的页面”。[^1]
- **返回 ModelAndView**
使用 `ModelAndView` 可以更灵活地指定视图名以及向视图传递数据。
```java
@Controller
public class TestController {
@RequestMapping("/jumpWithModelAndView")
public ModelAndView jumpWithModelAndView() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", "这是通过 ModelAndView 返回的页面");
modelAndView.setViewName("resultPage"); // 设置视图名为 resultPage
return modelAndView;
}
}
```
运行结果同上,但这种方式更加直观地展示了如何设置视图和模型数据。
- **返回 void 并配合重定向或转发**
如果控制器方法返回 `void`,则通常用于处理请求后不直接返回视图的情况,而是通过手动调用 `response.sendRedirect()` 或使用 `RedirectView` 实现重定向。
```java
@Controller
public class TestController {
@RequestMapping("/redirectExample")
public void redirectExample(HttpServletResponse response) throws IOException {
response.sendRedirect("/anotherEndpoint"); // 手动重定向
}
@RequestMapping("/forwardExample")
public String forwardExample() {
return "forward:/internalResource"; // 转发至内部资源
}
}
```
上述代码分别演示了重定向和转发两种场景下的应用。[^2]
---
#### 2. 数据回写的返回值类型
除了页面跳转外,Spring MVC 还支持多种形式的数据回写功能,主要用于前后端分离架构中的 API 接口开发。
- **直接回写字符串**
当前端只需要简单的文本响应时,可以直接返回字符串。
```java
@RestController
public class TestController {
@RequestMapping("/writeSimpleText")
public String writeSimpleText() {
return "这是一个简单的文本响应";
}
}
```
浏览器访问该接口后,将看到纯文本内容:“这是一个简单的文本响应”。[^3]
- **回写 JSON 格式的对象或集合**
需要引入 Jackson 库来序列化 Java 对象为 JSON 格式。以下是 Maven 依赖示例:
```xml
<!-- 引入 Jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
```
示例代码如下:
```java
@RestController
public class TestController {
@RequestMapping("/writeJsonObject")
public Map<String, Object> writeJsonObject() {
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("status", "SUCCESS");
resultMap.put("data", Arrays.asList(1, 2, 3));
return resultMap;
}
}
```
访问此接口后,客户端收到的内容将是标准的 JSON 字符串:
```json
{"status":"SUCCESS","data":[1,2,3]}
```
此处利用了 Jackson 自动完成对象与 JSON 的转换过程。[^3]
- **回写自定义对象**
将复杂的业务逻辑封装为实体类,并通过 RESTful 方式暴露给外部调用方。
```java
@RestController
public class TestController {
static class User {
private String name;
private int age;
// 构造函数、getter 和 setter 方法省略
}
@RequestMapping("/writeCustomObject")
public User writeCustomObject() {
User user = new User();
user.setName("张三");
user.setAge(25);
return user;
}
}
```
客户端接收的结果类似于:
```json
{"name":"张三","age":25}
```
这种方式非常适合构建微服务或者提供开放平台的服务能力。
---
### 总结
以上介绍了 Spring MVC 中常见的页面跳转和数据回写机制,涵盖了不同返回值类型的适用场景及其对应的代码实现细节。无论是传统的 JSP 渲染还是现代化的 JSON 数据交互,都可以借助 Spring MVC 提供的强大工具集轻松达成目标。
阅读全文
相关推荐












