Spring Boot项目@RestController使用重定向redirect方式

 更新时间:2021年09月02日 09:07:46   作者:EasonJim  
这篇文章主要介绍了Spring Boot项目@RestController使用重定向redirect方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Spring Boot @RestController重定向redirect

Spring MVC项目中页面重定向一般使用return "redirect:/other/controller/";即可。而Spring Boot使用了@RestController注解,上述写法只能返回字符串

解决方法如下

将一个HttpServletResponse参数添加到处理程序方法然后调用response.sendRedirect("some-url");

@RestController
public class FooController {
  @RequestMapping("/foo")
  void handleFoo(HttpServletResponse response) throws IOException {
    response.sendRedirect("some-url");
  }
}

@RestController 注释下的重定向探讨

背景

在工作中遇到需要@RestController 内部的方法直接进行重定向或者转发

我们知道@RestController注解后,方法默认返回json。但是如果返回ModelAndView 则依然按ModelAndView曾经的逻辑走

那么springmvc内部的逻辑是如何走的呢?

HandlerMethodReturnValueHandlerComposite#selectHandler()
HandlerMethodReturnValueHandlerComposite#handleReturnValue() 
ServletInvocableHandlerMethod#invokeAndHandle()
RequestMappingHandlerAdapter#invokeHandlerMethod()
RequestMappingHandlerAdapter#handleInternal() 
AbstractHandlerMethodAdapter#handle() 
DispatcherServlet#doDispatch()
DispatcherServlet#doService()

自下向上调用,最终通过依据返回参数和MethodParameter(方法参数的简述类) 得到使用何种HandlerMethodReturnValueHandler,当我们加上@RestController 如果方法返回ModelAndView 或者 View自然返回ModelAndViewMethodReturnValueHandler去处理,因此就解决了需要在@RestController注解下转发或重定向的问题。

下面是springmvc 默认的15种HandlerMethodReturnValueHandler

0 = {ModelAndViewMethodReturnValueHandler@7121} 
1 = {ModelMethodProcessor@8372} 
2 = {ViewMethodReturnValueHandler@8373} 
3 = {ResponseBodyEmitterReturnValueHandler@8374} 
4 = {StreamingResponseBodyReturnValueHandler@7125} 
5 = {HttpEntityMethodProcessor@8375} 
6 = {HttpHeadersReturnValueHandler@8376} 
7 = {CallableMethodReturnValueHandler@8377} 
8 = {DeferredResultMethodReturnValueHandler@8378} 
9 = {AsyncTaskMethodReturnValueHandler@8379} 
10 = {ModelAttributeMethodProcessor@8380} 
11 = {RequestResponseBodyMethodProcessor@7132} 
12 = {ViewNameMethodReturnValueHandler@8381} 
13 = {MapMethodProcessor@8382} 
14 = {ModelAttributeMethodProcessor@8383} 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • PowerJob LockService方法工作流程源码解读

    PowerJob LockService方法工作流程源码解读

    这篇文章主要为大家介绍了PowerJob LockService方法工作流程源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • java实现Socket通信之单线程服务

    java实现Socket通信之单线程服务

    这篇文章主要为大家详细介绍了java实现Socket通信的单线程服务,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • 使用Flyway进行Java数据库版本控制的操作指南

    使用Flyway进行Java数据库版本控制的操作指南

    今天我们将深入探讨如何使用Flyway进行Java数据库版本控制,Flyway是一个流行的数据库迁移工具,用于管理和自动化数据库模式的演变,文中通过代码示例介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-07-07
  • Maven项目在new module后,pom文件显示为Ignored pom.xml问题

    Maven项目在new module后,pom文件显示为Ignored pom.xml问题

    在Maven项目中,若创建过同名module后删除,再次创建时可能导致pom.xml文件被IDEA忽略,原因是IDEA保留了之前module的痕迹,导致重建时将其视为已删除的module,解决方法是进入IDEA设置,找到Maven的Ignored Files设置
    2024-09-09
  • mybatis plus动态数据源切换及查询过程浅析

    mybatis plus动态数据源切换及查询过程浅析

    这篇文章主要介绍了mybatis plus动态数据源切换及查询过程浅析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 快速搭建一个SpringBoot项目(纯小白搭建教程)

    快速搭建一个SpringBoot项目(纯小白搭建教程)

    本文主要介绍了快速搭建一个SpringBoot项目,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • java集合中的list详解

    java集合中的list详解

    这篇文章主要介绍了java集合中的list详解,还是比较不错的,这里分享给大家,需要的朋友可以参考下。
    2017-11-11
  • SpringSecurity HttpSecurity 类处理流程分析

    SpringSecurity HttpSecurity 类处理流程分析

    SpringSecurity在SSM项目中使用基于配置文件,通过XML标签定义认证信息,HttpSecurity在SpringBoot中通过代码配置实现与XML相同功能,详细介绍了HttpSecurity的类结构、处理过程及其与SecurityBuilder的关系,感兴趣的朋友一起看看吧
    2024-09-09
  • 关于Spring注解@Async引发其他注解失效的解决

    关于Spring注解@Async引发其他注解失效的解决

    这篇文章主要介绍了关于Spring注解@Async引发其他注解失效的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • SpringSecurity实现登陆认证并返回token方式

    SpringSecurity实现登陆认证并返回token方式

    这篇文章主要介绍了SpringSecurity实现登陆认证并返回token方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03

最新评论