一.响应json
1.响应json
给前端自动返回json数据
返回值处理器处理返回值
this.returnValueHandlers.handleReturnValue(
returnValue, getReturnValueType(returnValue), mavContainer, webRequest);
寻找哪个处理器能处理返回值
HandlerMethodReturnValueHandler handler = selectHandler(returnValue, returnType);
if (handler == null) {
throw new IllegalArgumentException("Unknown return value type: " + returnType.getParameterType().getName());
}
handler.handleReturnValue(returnValue, returnType, mavContainer, webRequest);
}
1.1.返回值解析器原理
返回值处理器:判断是否支持这种类型返回值,supportsReturnType
如果支持,就处理handleReturnValue
RequestResponseBodyMethodProcessor:可以处理返回值标注了@ResponseBody注解的
利用:MessageConverters对数据进行处理,将数据写为json
1.1.1内容协商(浏览器默认会以请求头的方式告诉服务器它能接受什么样的内容类型)
服务器最终根据自己自身的能力,决定服务器能生产出什么样内容类型的数据
SpringMVC会挨个遍历所有容器底层的HttpMessageConverter ,看谁能处理?
1…MappingJackson2HttpMessageConverter可以将对象写为json
2.利用MappingJackson2HttpMessageConverter将对象转为json再写出去
总结:先找到RequestResponseBodyMethodProcessor处理器,在利用其中中的的消息处理器进行处理