栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot-方法处理1-方法处理器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot-方法处理1-方法处理器

1.问题

接上回研究全局异常处理器的过程中,发现spring是通过参数解析器(HandlerMethodArgumentResolver)解析全局异常处理器的参数的。本文稍微研究一下参数解析器;

2.调用过程

调用全局异常处理方法的过程分为如下三步。本文主要研究方法处理器(HandlerMethod),后续两篇研究参数解析器(HandlerMethodArgumentResolver)和返回值处理器(HandlerMethodReturnValueHandler)

  • 创建方法处理器(HandlerMethod),解析方法的参数,并处理返回结果;
  • 方法处理器委托参数解析器(HandlerMethodArgumentResolver)解析方法的参数;
  • 方法处理器委托返回值处理器(HandlerMethodReturnValueHandler)处理方法的返回结果;
3.使用示例(重点)

在全局全局异常处理器中使用各种类型的参数;

3.1.默认参数解析器
  • request由ServletRequestMethodArgumentResolver解析,默认可以使用;
  • @RequestParam由RequestParamMapMethodArgumentResolver解析,默认不可以使用。需要通过WebMvcConfigurationSupport的addArgumentResolvers方法添加;
@RestControllerAdvice
public class GoldjetInterfacePlatformExceptionHander extends AppExceptionHandler {
    
    /
@Configuration
public class MyConfig extends WebMvcConfigurationSupport {

    /
public class MyWebArgumentResolver implements WebArgumentResolver {

    /
@Configuration
public class MyConfig extends WebMvcConfigurationSupport {

    /
	public ConcurrentResultHandlerMethod(final Object result, ConcurrentResultMethodParameter returnType) {
		super((Callable) () -> {
			if (result instanceof Exception) {
				throw (Exception) result;
			}
			else if (result instanceof Throwable) {
				throw new NestedServletException("Async processing failed", (Throwable) result);
			}
			return result;
		}, CALLABLE_METHOD);

		if (ServletInvocableHandlerMethod.this.returnValueHandlers != null) {
			setHandlerMethodReturnValueHandlers(ServletInvocableHandlerMethod.this.returnValueHandlers);
		}
		this.returnType = returnType;
	}
}


转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号