SpringMVC_20_响应之返回值是void类型

本文介绍如何在SpringMVC中使用返回类型为void的方法,并通过不同的方式实现页面跳转:请求转发、重定向及直接响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在response.jsp中加入一个a标签

    <a href="user/testVoid">testVoid</a>

2.在UserController中加入testVoid方法

@Controller
@RequestMapping("/user")
public class UserController {
    /**
     * 返回void
     * @param model
     * @return
     */
    @RequestMapping("/testVoid")
    public void testVoid(Model model){
        System.out.println("testVoid方法执行了...");
    }
}

3.部署,失败,发现会自动找testvoid.jsp

在这里插入图片描述

4.解决:重新写testvoid方法

@Controller
@RequestMapping("/user")
public class UserController {
    /**
     * 返回void
     * 请求转发一次请求,不用编写项目的名称
     */
    @RequestMapping("/testVoid")
    public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception{
        System.out.println("testVoid方法执行了...");
        //编写请求转发的程序
        request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
        return;
    }
}

5.再次部署,成功

在这里插入图片描述

6.重定向

@RequestMapping("/testVoid")
    public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception{
        System.out.println("testVoid方法执行了...");
        //编写请求转发的程序
        //request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
        //重定向
        response.sendRedirect(request.getContextPath()+"/index.jsp");
        return;
    }

6.部署,成功

在这里插入图片描述

7.直接进行响应

@Controller
@RequestMapping("/user")
public class UserController {
    /**
     * 返回void
     * 请求转发一次请求,不用编写项目的名称
     */
    @RequestMapping("/testVoid")
    public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception{
        System.out.println("testVoid方法执行了...");
        //设置中文乱码
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        //直接进行响应
        response.getWriter().print("你好");

        return;
    }
}

8.部署

在这里插入图片描述

### Spring MVC 控制器方法返回值类型及其使用场景 #### void 类型 当不需要视图解析,即不需转向任何页面或发送响应体给客户端时,可以选择 `void` 作为控制器方法的返回值。通常用于异步请求处理或是仅执行某些操作而无需展示结果的情况。 ```java @RequestMapping("/doSomething") public void doSomething(HttpServletResponse response) throws IOException { // 执行一些业务逻辑... } ``` #### String 类型 如果希望指定一个视图名称让容器去查找对应的视图模板并渲染它,则可以采用字符串形式来表示目标视图的名字。这种情况下,默认会按照配置好的前缀和后缀拼接成实际路径进行加载[^1]。 ```java @RequestMapping("/showPage") public String showPage() { return "viewName"; // 假设对应的是 /WEB-INF/jsp/viewName.jsp 或其他配置设定的位置 } ``` #### ModelAndView 类型 对于既想要指明具体使用的视图又希望能够携带模型数据一同传递至前端的情形下,推荐利用 `ModelAndView` 来完成这一需求。通过创建该类型的实例并向其中添加属性的方式实现数据共享[^2]。 ```java @RequestMapping("/dataView") public ModelAndView dataView() { Map<String, Object> model = new HashMap<>(); model.put("key", value); return new ModelAndView("targetView", model); // 同时设置了视图名与model中的键值对 } ``` #### Java 对象 (如 ResponseEntity<T>) 为了更灵活地构建HTTP响应消息头、状态码等内容,可以直接返回实现了 `HttpMessageConverter` 接口的对象,比如 `ResponseEntity<?>` 。这允许开发者精确控制整个 HTTP 响应的内容结构[^3]。 ```java @GetMapping("/api/resource") @ResponseBody public ResponseEntity<Resource> getResource(@PathVariable Long id){ Resource resource = service.getResourceById(id); HttpStatus status = null == resource ? HttpStatus.NOT_FOUND : HttpStatus.OK; return new ResponseEntity<>(resource,status); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值