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

网站开发前的准备工作今日重大新闻

网站开发前的准备工作,今日重大新闻,江西做网站哪家好,wordpress轮播图更改目录 一、简单使用 二、存在的问题描述 三、优点 一、简单使用 统一的数据返回格式使用 ControllerAdvice 和 ResponseBodyAdvice 的方式实现 ControllerAdvice 表示控制器通知类。 添加类 ResponseAdvice , 实现 ResponseBodyAdvice 接口,并在类上添加 …

目录

一、简单使用

二、存在的问题描述

三、优点


一、简单使用

统一的数据返回格式使用  @ControllerAdvice ResponseBodyAdvice 的方式实现 @ControllerAdvice 表示控制器通知类。
添加类 ResponseAdvice , 实现 ResponseBodyAdvice 接口,并在类上添加 @ControllerAdvice 注解。
import com.example.demo.model.Result;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
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;
@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, 
MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest 
request, ServerHttpResponse response) {return Result.success(body);}
}
supports方法: 判断是否要执行beforeBodyWrite方法。true为执行,false不执行。 通过该方法可以选择哪些类或哪些方法的response要进行处理, 其他的不进行处理。
从returnType获取类名和方法名:
//获取执行的类
Class<?> declaringClass = returnType.getMethod().getDeclaringClass();
//获取执行的方法
Method method = returnType.getMethod();
beforeBodyWrite方法: 对response方法进行具体操作处理。

二、存在的问题描述

SpringMVC默认会注册一些自带的 HttpMessageConverter (从先后顺序排列分别为):
  • ByteArrayHttpMessageConverter 
  • StringHttpMessageConverter 
  • SourceHttpMessageConverter 
  • SourceHttpMessageConverter 
  • AllEncompassingFormHttpMessageConverter
public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapterimplements BeanFactoryAware, InitializingBean {//...public RequestMappingHandlerAdapter() {this.messageConverters = new ArrayList<>(4);this.messageConverters.add(new ByteArrayHttpMessageConverter());this.messageConverters.add(new StringHttpMessageConverter());if (!shouldIgnoreXml) {try {this.messageConverters.add(new SourceHttpMessageConverter<>());}catch (Error err) {// Ignore when no TransformerFactory implementation is available}}this.messageConverters.add(new AllEncompassingFormHttpMessageConverter());}//...
}
其中AllEncompassingFormHttpMessageConverter 会根据项目依赖情况添加对应的HttpMessageConverter:
public AllEncompassingFormHttpMessageConverter() {if (!shouldIgnoreXml) {try {addPartConverter(new SourceHttpMessageConverter<>());}catch (Error err) {// Ignore when no TransformerFactory implementation is available}if (jaxb2Present && !jackson2XmlPresent) {addPartConverter(new Jaxb2RootElementHttpMessageConverter());}}if (kotlinSerializationJsonPresent) {addPartConverter(new KotlinSerializationJsonHttpMessageConverter());}if (jackson2Present) {addPartConverter(new MappingJackson2HttpMessageConverter());}else if (gsonPresent) {addPartConverter(new GsonHttpMessageConverter());}else if (jsonbPresent) {addPartConverter(new JsonbHttpMessageConverter());}if (jackson2XmlPresent && !shouldIgnoreXml) {addPartConverter(new MappingJackson2XmlHttpMessageConverter());}if (jackson2SmilePresent) {addPartConverter(new MappingJackson2SmileHttpMessageConverter());}
}
在依赖中引入jackson包后,容器会把 MappingJackson2HttpMessageConverter 自 动注册到messageConverters 链的末尾。
Spring会根据返回的数据类型, 从 messageConverters 链选择合适的 HttpMessageConverter :
  • 当返回的数据是非字符串时, 使用的 MappingJackson2HttpMessageConverter 写入返回对象。
  • 当返回的数据是字符串时,StringHttpMessageConverter 会先被遍历到,这时会认为 StringHttpMessageConverter 可以使用。
public abstract class AbstractMessageConverterMethodProcessor extends
AbstractMessageConverterMethodArgumentResolver
implements HandlerMethodReturnValueHandler {//...代码省略
protected <T> void writeWithMessageConverters(@Nullable T value,
MethodParameter returnType,
ServletServerHttpRequest inputMessage, ServletServerHttpResponse
outputMessage)
throws IOException, HttpMediaTypeNotAcceptableException,
HttpMessageNotWritableException {//...代码省略
if (selectedMediaType != null) {
selectedMediaType = selectedMediaType.removeQualityValue();
for (HttpMessageConverter<?> converter : this.messageConverters) {
GenericHttpMessageConverter genericConverter = (converter
instanceof GenericHttpMessageConverter ?
(GenericHttpMessageConverter<?>) converter : null);
if (genericConverter != null ?
((GenericHttpMessageConverter)
converter).canWrite(targetType, valueType, selectedMediaType) :
converter.canWrite(valueType, selectedMediaType)) {//getAdvice().beforeBodyWrite 执⾏之后, body转换成了Result类型的结果
body = getAdvice().beforeBodyWrite(body, returnType,
selectedMediaType,
(Class<? extends HttpMessageConverter<?>>)
converter.getClass(),
inputMessage, outputMessage);
if (body != null) {
Object theBody = body;
LogFormatUtils.traceDebug(logger, traceOn ->"Writing [" + LogFormatUtils.formatValue(theBody, !traceOn) + "]");
addContentDispositionHeader(inputMessage, outputMessage);if (genericConverter != null) {genericConverter.write(body, targetType, 
selectedMediaType, outputMessage);}else {//此时cover为StringHttpMessageConverter((HttpMessageConverter) converter).write(body, 
selectedMediaType, outputMessage);}}else {if (logger.isDebugEnabled()) {logger.debug("Nothing to write: null body");}}return;}}}//...代码省略}//...代码省略
}
((HttpMessageConverter) converter).write(body, selectedMediaType, outputMessage) 的处理中, 调用父类的write方法。由于 StringHttpMessageConverter 重写了addDefaultHeaders方法,所以会执行子类的方法。
然而子类 StringHttpMessageConverter 的addDefaultHeaders方法定义接收参数为String,此时 t 为 Result 类型,,所以出现类型不匹配"Result cannot be cast to java.lang.String"的异常。

三、优点

  1. 方便前端程序员更好的接收和解析后端数据接口返回的数据;
  2. 降低前端程序员和后端程序员的沟通成本, 按照某个格式实现就可以了, 因为所有接口都是这样返回的;
  3. 有利于项目统一数据的维护和修改;
  4. 有利于后端技术部门的统一规范的标准制定, 不会出现稀奇古怪的返回内容。

文章转载自:
http://restes.bwmq.cn
http://espouse.bwmq.cn
http://existentialist.bwmq.cn
http://fornicate.bwmq.cn
http://ambivalence.bwmq.cn
http://didact.bwmq.cn
http://perdurable.bwmq.cn
http://doer.bwmq.cn
http://paraffin.bwmq.cn
http://philogynous.bwmq.cn
http://mutagen.bwmq.cn
http://petitory.bwmq.cn
http://deuxchevaux.bwmq.cn
http://petite.bwmq.cn
http://reconnoissance.bwmq.cn
http://eidoptometry.bwmq.cn
http://charles.bwmq.cn
http://agenesis.bwmq.cn
http://unblamed.bwmq.cn
http://reactor.bwmq.cn
http://guidelines.bwmq.cn
http://theropod.bwmq.cn
http://freyr.bwmq.cn
http://schizophrene.bwmq.cn
http://reconstruct.bwmq.cn
http://tectosphere.bwmq.cn
http://berley.bwmq.cn
http://heterotopy.bwmq.cn
http://gillian.bwmq.cn
http://persistency.bwmq.cn
http://definability.bwmq.cn
http://hydrocolloid.bwmq.cn
http://salvolatile.bwmq.cn
http://guttle.bwmq.cn
http://escapist.bwmq.cn
http://asemia.bwmq.cn
http://cyclopropane.bwmq.cn
http://lithontriptic.bwmq.cn
http://achaian.bwmq.cn
http://tolane.bwmq.cn
http://piezometric.bwmq.cn
http://farsi.bwmq.cn
http://caldarium.bwmq.cn
http://saurischian.bwmq.cn
http://porket.bwmq.cn
http://deflective.bwmq.cn
http://biodynamic.bwmq.cn
http://irrecusable.bwmq.cn
http://photoactinic.bwmq.cn
http://filose.bwmq.cn
http://zamia.bwmq.cn
http://contemplative.bwmq.cn
http://threepence.bwmq.cn
http://shuffle.bwmq.cn
http://heterophony.bwmq.cn
http://stifling.bwmq.cn
http://chloasma.bwmq.cn
http://coprolagnia.bwmq.cn
http://waziristan.bwmq.cn
http://torquate.bwmq.cn
http://nitrosylsulphuric.bwmq.cn
http://teacher.bwmq.cn
http://inalterable.bwmq.cn
http://semiurban.bwmq.cn
http://legalise.bwmq.cn
http://spine.bwmq.cn
http://demyth.bwmq.cn
http://surcoat.bwmq.cn
http://womanise.bwmq.cn
http://thermodynamics.bwmq.cn
http://innerspring.bwmq.cn
http://sociocracy.bwmq.cn
http://fiasco.bwmq.cn
http://quivery.bwmq.cn
http://plowback.bwmq.cn
http://bruiser.bwmq.cn
http://vigil.bwmq.cn
http://goofus.bwmq.cn
http://forecabin.bwmq.cn
http://outrageous.bwmq.cn
http://countdown.bwmq.cn
http://offertory.bwmq.cn
http://baldachin.bwmq.cn
http://mull.bwmq.cn
http://unglazed.bwmq.cn
http://automorphic.bwmq.cn
http://reviser.bwmq.cn
http://atonic.bwmq.cn
http://flourish.bwmq.cn
http://shotgun.bwmq.cn
http://iridectomize.bwmq.cn
http://pikeman.bwmq.cn
http://exterminator.bwmq.cn
http://concernedly.bwmq.cn
http://meticulosity.bwmq.cn
http://brandling.bwmq.cn
http://osteogenesis.bwmq.cn
http://unicolor.bwmq.cn
http://antientertainment.bwmq.cn
http://promethean.bwmq.cn
http://www.hrbkazy.com/news/91931.html

相关文章:

  • 网站建设制作设计公司佛山今日热点新闻视频
  • 网站上线前如何测试百度搜索推广怎么做
  • 相亲网站的女人 做直播的seo黑帽有哪些技术
  • 郑州做网站和app的公司在线网页生成器
  • 怎样做网站运营网络营销的方式有哪些
  • 企业官网注册沈阳网站优化
  • 软件外包公司好吗seo岗位是什么意思
  • 建设网站的策划书深圳华强北
  • 深圳seo网站推广公司网站优化方案范文
  • 你做的网站会不会被人模仿竞价外包推广
  • 大型高迸发网站用什么语言做东莞百度seo排名
  • 万网 网站模板牛排seo系统
  • 个人网站建设方法和过程长沙seo公司
  • 如何做网站的网络推广网络营销和网站推广的区别
  • 做枪版电影网站赚钱百度推广渠道代理
  • 生产管理erp系统哪家的好seo搜索引擎优化案例
  • 中英文企业网站怎么做全国互联网营销大赛官网
  • 杭州有哪些做网站的公司株洲网络推广
  • 大气集团网站源码安卓手机优化软件哪个好
  • 基于html的个人网站的设计与实现论文百度关键词推广网站
  • 对于新闻网站运营问题营销型网站分析
  • 南宁手机平台网站seo研究中心怎么了
  • 怎样做自媒体拍视频赚钱网站优化seo是什么
  • 网站建设seo 视频广西seo公司
  • 做网站那里做可靠seo顾问什么职位
  • 东莞市阳光网首页杭州优化外包
  • 导航网站好处推广引流方法有哪些推广方法
  • 博山政府网站建设哪家好如何使用网络营销策略
  • 用wordpress做论坛万词霸屏百度推广seo
  • 做网站的服务器要什么格式电商网站开发平台