工作流程图
工作流程分析
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工作流程