Spring MVC的工作流程

工作流程图

在这里插入图片描述

工作流程分析

1.浏览器向客户端发送请求-前端控制器
2.前端控制器请求处理器映射器获取Handler
3.处理器映射器返回Handler给前端控制器
4.前端控制器请求处理器适配器执行Handler
5.处理器适配器调用Controller层执行Handler
6.Controller层向处理器适配器返回View和Model对象
7.处理器适配器向前端控制器返回View和Model
8.前端控制器向视图解析器发起请求解析视图View和Model
9.视图解析器向前端控制器返回视图View
10.前端控制器向视图View渲染视图

项目中出现的问题

正常执行了功能,但是前端没有反馈成功,因为响应没有做处理,直接返回的是controller的方法返回值,需要返回Result的对象.
所以,要添加一个WebResponseHander将响应做统一处理输出

@ControllerAdvice
public class WebResponseHandler implements ResponseBodyAdvice<Object> {

    @Override
    public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
        return true;
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass,
                                  ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {

        if (body instanceof Result || body instanceof Json || body instanceof UiConfiguration
                || (body instanceof ArrayList && ((ArrayList) body).get(0) instanceof SwaggerResource)){
            return body;
        }
        return new Result<>(body);
    }
}
  • 这个方法执行位置在controller返回数据之后,响应返回前端之前.
  • controller返回值如果不满足要求,就会统一封装成Result对象.
  • body就是controller返回数据

前端请求到后台服务的流转过程

例如:
http://localhost:8989/api/worker/create 发给前端代理(vue.config.js)
http://localhost:8097/worker/create 进入网关
lb://luban-worker-server/worker/create 找到路由断言匹配,负载均衡服务
http://localhost:9001/worker/create 进入controller逻辑
执行spring mvc工作流程

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值