1,spring-boot 引入web包后带有json的stater。
只需在类方法上面responseBody就可以。
2,有返回值解析器returnValueHandlers进行处理。
3,
执行完这个方法后,得到返回值,进行一些返回值安全判断后。
4,使用返回值处理器进行处理。
下面分析这个方法怎么处理:
1.首先调用了这个方法:
stepover --》stepinto
2.来到真正的处理方法中:
首先,选择一个对应的handler
返回值处理器会判断返回值处理器是否支持处理该类型返回值,支持就处理。
拓展:根据supportsReturnType 查看到返回值支持以下类型
view ResponseEntity StreamingResponseBody HttpEntity HttpHeaders Callable DeferredResult ListenableFuture CompletionStage WebAsyncTask hasMethodAnnotation(ModelAttribute.class) 被此注解标注的方法也可以被处理 被ResponseBody.class标注的方法返回值可被处理 etc.....
被@ResponseBody标注的被次处理器处理 (requestresponsebodymethodprocessor)
找到对应处理器后执行该方法:
步入:
使用消息转换器进行写出操作。步入该方法-》
首先对返回值的类型进行一系列判断,
都不是则需要判断媒体类型,与浏览器进行内容协商
获得浏览器支持显示的内容类型
有如下7种:
进行协商,将能用的mediaType放入List
确定使用的类型为json
遍历所有messageConverter
这是所有converter:
每种messageConverter支持的返回值类型都不一样。
最终无论你是什么类型遇到最后一种直接转为json
调用objectWriter