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

网站简繁体转换.rar盐城哪里帮助公司建网址

网站简繁体转换.rar,盐城哪里帮助公司建网址,eclipse开发安卓app,龙岗中心城有学网站建设在我们进行Java的Web应用开发时#xff0c;如何写更少的代码#xff0c;做更多的事情。如何让开发更容易上手#xff0c;更专注于业务层面#xff0c;不需要太关心底层的实现。这里就分享一些我平时在搭建基础框架时候的一些心得体验。 统一处理返回值 在web应用中#x…在我们进行Java的Web应用开发时如何写更少的代码做更多的事情。如何让开发更容易上手更专注于业务层面不需要太关心底层的实现。这里就分享一些我平时在搭建基础框架时候的一些心得体验。 统一处理返回值 在web应用中通常前后端会定义一个统一的对象来封装返回值一般除了业务数据之外可能会包含一些请求相关的数据 例如以下这个对象 code来标识整个请求的结果msg用于返回错误信息data用于返回实际的业务数据。 {code: 0,msg: success,data: {} }统一封装的好处就是前端可以使用统一的逻辑进行请求处理能够编写通用代码来处理返回值。 当然这也需要后端做一定的开发。通常我们都是直接写在代码里面手动去创建一个封装对象然后将数据set进去或者是封装类添加一些静态方法之类的。 在大部分情况下这些工作都是重复的。 ResponseBodyAdvice 的执行流程 今天介绍的这个接口 ResponseBodyAdvice, 这是由SpringMvc提供的一个接口在消息转换前处理返回值源码如下 public interface ResponseBodyAdviceT{boolean supports(MethodParameter returnType, Class? extends HttpMessageConverter? converterType);T beforeBodyWrite(T body, MethodParameter returnType, MediaType selectedContentType,Class? extends HttpMessageConverter? selectedConverterType,ServerHttpRequest request, ServerHttpResponse response); }这个接口在返回值被消息转换器写回前端之前进行处理 大致处理流程如下 我们实现这个接口的代码主要在这个方法里被调用 RequestResponseBodyAdviceChain.processBody 可以看到这一段逻辑很简单 先执行ResponseBodyAdvice.supports看当前切面类是否支持如果支持再调用ResponseBodyAdvice.beforeBodyWrite方法并返回 返回值会被 HttpMessageConverter.write 接口在进行最终的转换例如转JSON然后写回前端 private T Object processBody(Nullable Object body, MethodParameter returnType, MediaType contentType,Class? extends HttpMessageConverter? converterType,ServerHttpRequest request, ServerHttpResponse response) {for (ResponseBodyAdvice? advice : getMatchingAdvice(returnType, ResponseBodyAdvice.class)) {if (advice.supports(returnType, converterType)) {body ((ResponseBodyAdviceT) advice).beforeBodyWrite((T) body, returnType,contentType, converterType, request, response);}}return body; }ResponseBodyAdvice 的初始化 SpringMVC在初始化的时候 会调用RequestMappingHandlerAdapter.initControllerAdviceCache将ResponseBodyAdvice初始化到容器中 里面会调用ControllerAdviceBean.findAnnotatedBeans 获取所有带有 ControllerAdvice 注解的类 将所有实现了 ResponseBodyAdvice 接口的Bean放入requestResponseBodyAdviceBeans中 在之前介绍到的 getAdvice() 方法取得就是该对象。 //代码片段 public static ListControllerAdviceBean findAnnotatedBeans(ApplicationContext context) {return Arrays.stream(BeanFactoryUtils.beanNamesForTypeIncludingAncestors(context, Object.class)).filter(name - context.findAnnotationOnBean(name, ControllerAdvice.class) ! null).map(name - new ControllerAdviceBean(name, context)).collect(Collectors.toList()); }// 代码片段 for (ControllerAdviceBean adviceBean : adviceBeans) {Class? beanType adviceBean.getBeanType();if (beanType null) {throw new IllegalStateException(Unresolvable type for ControllerAdviceBean: adviceBean);}SetMethod attrMethods MethodIntrospector.selectMethods(beanType, MODEL_ATTRIBUTE_METHODS);if (!attrMethods.isEmpty()) {this.modelAttributeAdviceCache.put(adviceBean, attrMethods);}SetMethod binderMethods MethodIntrospector.selectMethods(beanType, INIT_BINDER_METHODS);if (!binderMethods.isEmpty()) {this.initBinderAdviceCache.put(adviceBean, binderMethods);}if (RequestBodyAdvice.class.isAssignableFrom(beanType)) {requestResponseBodyAdviceBeans.add(adviceBean);}if (ResponseBodyAdvice.class.isAssignableFrom(beanType)) {requestResponseBodyAdviceBeans.add(adviceBean);} }了解到这些我们实现一个通用的返回值处理就很简单了 只需要实现 ResponseBodyAdvice 接口并且加上 ControllerAdvice 注解就可以了 这是我实现的一个统一封装返回值的实现 大家可以参考一下根据自己的业务需求来进行修改 package com.diamondfsd.fast.mvc.advice;import com.diamondfsd.fast.mvc.annotations.IgnoreAware; import com.diamondfsd.fast.mvc.entity.FastResult; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;import java.lang.reflect.Method; import java.util.Map; import java.util.WeakHashMap;/*** 统一返回数据封装* author Diamond*/ ControllerAdvice public class FastMvcResponseBodyAwareAdvice implements ResponseBodyAdviceObject {private final MapMethod, Boolean supportsCache new WeakHashMap();private final String [] basePackages;private ObjectMapper objectMapper new ObjectMapper();public FastMvcResponseBodyAwareAdvice(String [] basePackages) {this.basePackages basePackages;}Overridepublic boolean supports(MethodParameter returnType, Class? extends HttpMessageConverter? converterType) {if (supportsCache.containsKey(returnType.getMethod())) {return supportsCache.get(returnType.getMethod());}boolean isSupport getIsSupport(returnType);supportsCache.put(returnType.getMethod(), isSupport);return isSupport;}private boolean getIsSupport(MethodParameter returnType) {Class? declaringClass returnType.getMember().getDeclaringClass();IgnoreAware classIgnore declaringClass.getAnnotation(IgnoreAware.class);IgnoreAware methodIgnore returnType.getMethod().getAnnotation(IgnoreAware.class);if (classIgnore ! null || methodIgnore ! null || FastResult.class.equals(returnType.getGenericParameterType())) {return false;}for (int i 0; i basePackages.length; i) {if (declaringClass.getPackage().getName().startsWith(basePackages[i])) {return true;}}return false;}Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,Class? extends HttpMessageConverter? selectedConverterType, ServerHttpRequest request,ServerHttpResponse response) {FastResultObject result new FastResult();result.setData(body);if (returnType.getGenericParameterType().equals(String.class)) {try {response.getHeaders().set(Content-Type, application/json;charsetutf-8);return objectMapper.writeValueAsString(result);} catch (JsonProcessingException e) {e.printStackTrace();}}return result;}}
http://www.sadfv.cn/news/219826/

相关文章:

  • 网站底部图片wordpress配置数据库失败6
  • 广州市网站集约化建设工作要求简约淘宝网站模板免费下载
  • 建设网站实训收获网站的策划与建设阶段
  • 网站客户问题解答广告平面设计培训班要学多久
  • 网站开发php 图片上传失败wordpress meta seo
  • 网站描述怎么写利于seo河南做网站公司
  • 关于网站建设的折页广告2019建设银行招聘网站
  • 房屋网签查询系统官方网站ftp服务器软件
  • 做网站公司分为国内还是国外塘厦建设网站
  • 做汽配的网站网站建设和优化需要几个人
  • 北京微网站设计贵州省住房及城乡建设部网站
  • 重庆公司建网站流程wordpress 视频黑屏
  • 网站建设中html模板文件服务器网站搭建教程
  • 网站开发找哪家医院做网站开发
  • 东莞网站建设代理商网址导航网站怎样做
  • 北京通信管理局网站备案处网站域名怎么看
  • wordpress建站教程百科wordpress最好的中文主题
  • 投资网站建设公司万江专业网站快速排名
  • 网站被k的原因wordpress 主题之家
  • 揭阳门户网站开发网站建设包括哪些流程
  • 企业内部网站源码网站关键词排名提高
  • 自己注册个公司做网站怎么样wordpress hpkp
  • 发新闻稿做新闻源对网站有啥帮助成都网站建设快速服务
  • 空包网站怎么建设网页游戏传奇霸业
  • 在线设计装修的网站企业宣传报道模板范文
  • 江西中恒建设集团有限公司网站网络推广公司联系昔年下拉
  • 海口网站建设推广直播间人气互动平台
  • 江苏靖江苏源建设有限公司招标网站最新手机发布会
  • 云南省昆明市做网站的公司网络广告的发布渠道有哪些
  • 建设银行网站怎么预约纪念币wordpress预订插件