当前位置: 首页 > news >正文

p2p商城网站建设常见的网站推广方法

p2p商城网站建设,常见的网站推广方法,3d建模师可以自学吗,沧州网站建设申梦既是一个参数解析器&#xff0c;也是一个返回结果处理器。 1.持有消息转换器的集合 protected final List<HttpMessageConverter<?>> messageConverters;2.作为参数解析器&#xff0c;例如对RequestBody标识的参数进行解析 判断是否支持当前类型的参数 Overrid…

既是一个参数解析器,也是一个返回结果处理器。
1.持有消息转换器的集合

protected final List<HttpMessageConverter<?>> messageConverters;

2.作为参数解析器,例如对@RequestBody标识的参数进行解析

  • 判断是否支持当前类型的参数
@Override
public boolean supportsParameter(MethodParameter parameter) {return parameter.hasParameterAnnotation(RequestBody.class);
}
  • 进行解析
    RequestResponseBodyMethodProcessor根据请求的content-type和我们的参数以及Controller对象类型等信息挨个询问每个消息转化器是否支持解析当前HTTP消息。
@Override
public Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception {parameter = parameter.nestedIfOptional();//核心的参数解析Object arg = readWithMessageConverters(webRequest, parameter, parameter.getNestedGenericParameterType());//...return adaptArgumentIfNecessary(arg, parameter);
}

readWithMessageConverters()函数会将HTTP请求体中的JSON转为我们的Java对象,主要用到转换器的**canRead()和Read()**方法,其源码如下:

@Nullable
protected <T> Object readWithMessageConverters(HttpInputMessage inputMessage, MethodParameter parameter,Type targetType) throws IOException, HttpMediaTypeNotSupportedException, HttpMessageNotReadableException {//拿到请求类型MediaType contentType;boolean noContentType = false;try {contentType = inputMessage.getHeaders().getContentType();}//...//拿到我们的参数类型和Controller类型Class<?> contextClass = parameter.getContainingClass();Class<T> targetClass = (targetType instanceof Class ? (Class<T>) targetType : null);//...//拿到HTTP请求类型HttpMethod httpMethod = (inputMessage instanceof HttpRequest ? ((HttpRequest) inputMessage).getMethod() : null);Object body = NO_VALUE;EmptyBodyCheckingHttpInputMessage message = null;try {message = new EmptyBodyCheckingHttpInputMessage(inputMessage);//开始遍历所有的HttpMessageConverter,看看谁支持将当前http请求内容转为我们的参数for (HttpMessageConverter<?> converter : this.messageConverters) {Class<HttpMessageConverter<?>> converterType = (Class<HttpMessageConverter<?>>) converter.getClass();GenericHttpMessageConverter<?> genericConverter =(converter instanceof GenericHttpMessageConverter ? (GenericHttpMessageConverter<?>) converter : null);if (genericConverter != null ? genericConverter.canRead(targetType, contextClass, contentType) ://核心就是canRead,与我们参数解析器的support()功能一致(targetClass != null && converter.canRead(targetClass, contentType))) {if (message.hasBody()) {HttpInputMessage msgToUse =getAdvice().beforeBodyRead(message, parameter, targetType, converterType);//找到HttpMessageConverter后调用read方法进行转化body = (genericConverter != null ? genericConverter.read(targetType, contextClass, msgToUse) :((HttpMessageConverter<T>) converter).read(targetClass, msgToUse));body = getAdvice().afterBodyRead(body, msgToUse, parameter, targetType, converterType);}else {body = getAdvice().handleEmptyBody(null, message, parameter, targetType, converterType);}break;}}}//...异常捕捉与日志记录return body;
}

3.作为返回值处理器,可以处理@ResponseeBody所标识方法的返回值

  • 返回值处理器处理返回值:
this.returnValueHandlers.handleReturnValue(returnValue, getReturnValueType(returnValue), mavContainer, webRequest);
public void handleReturnValue(@Nullable Object returnValue, MethodParameter returnType,ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {HandlerMethodReturnValueHandler handler = selectHandler(returnValue, returnType);if (handler == null) {throw new IllegalArgumentException("Unknown return value type: " + returnType.getParameterType().getName());}//处理返回值handler.handleReturnValue(returnValue, returnType, mavContainer, webRequest);
}private HandlerMethodReturnValueHandler selectHandler(@Nullable Object value, MethodParameter returnType) {boolean isAsyncValue = isAsyncReturnValue(value, returnType);for (HandlerMethodReturnValueHandler handler : this.returnValueHandlers) {if (isAsyncValue && !(handler instanceof AsyncHandlerMethodReturnValueHandler)) {continue;}if (handler.supportsReturnType(returnType)) {return handler;}}return null;
}

supportsReturnType()是判断是否支持当前返回值,源码如下:

@Override
public boolean supportsReturnType(MethodParameter returnType) {return (AnnotatedElementUtils.hasAnnotation(returnType.getContainingClass(), ResponseBody.class) ||returnType.hasMethodAnnotation(ResponseBody.class));
}
  • 处理返回值
    通过内容协商确定输出信息的类型,遍历消息转换器,寻找能够支持该类型的转换器,并进行转换。主要用到的方法是canWirte()和Write()。最终可以将JaveBean对象转换为Json。
http://www.fp688.cn/news/158366.html

相关文章:

  • wordpress 云存储百度首页排名优化服务
  • 做网站能赚钱常用的网络营销方法及效果
  • 光谷做网站网站排名优化服务公司
  • 云梦做网站seo二级目录
  • 小榄网站建设舟山seo
  • 好的数据库网站西安网站设计公司
  • 长沙专业做网站站长之家素材网站
  • 宏信网络网站建设fifa世界排名最新
  • 网站用国外的服务器打不开平台推广是什么工作
  • 微信做一元云购网站web网页制作成品免费
  • 做网站赚50万seo运营培训
  • 哈尔滨城乡建设网站营销策划主要做些什么
  • php建设动态网站百度关键词搜索广告的优缺点
  • 做网站绿色和什么颜色搭配wordpress外贸独立站
  • 怎么做网站背景图天气预报最新天气预报
  • 网站开发过程分为哪几个阶段腾讯域名注册官网
  • wordpress文章排版杭州搜索引擎优化公司
  • 兰州网站优化软件代理公司注册
  • 石家庄网站建设哪里好公司建官网要多少钱
  • 成都建立公司网站网店如何推广
  • 腾讯云服务器免费东营seo
  • 营销网站的设计与实现百家号官网
  • 移动端网站建设需要注意哪些问题淘宝关键词怎么做排名靠前
  • 1m带宽做网站快不网站优化平台
  • 宜春做网站的广州推广系统
  • 网站怎么设置qq扬州百度推广公司
  • 管理咨询公司起名大气上口的优化关键词的方法正确的是
  • 中山家居企业网站建设怎么去优化关键词
  • 番禺人才网招聘网官网最新招聘嘉兴seo计费管理
  • 怎么建立一个购物网站哪个平台推广效果好