西北大学物理习题册答案
物理一般指物理学。 物理学(physics)是研究物质最一般的运动规律和物质基本结构的学科。作为自然科学的带头学科,物理学研究大至宇宙,小至基本粒子等一切物质最基本的运动形式和规律,因此成为其他各自然科学学科的研究基础。
文件:url80.ctfile.com/f/25127180-604720087-4ab2e7?p=551685 (访问密码: 551685)
以下内容无关:
一.系统环境
Windows版本 系统类型 浏览器Chrome版本
Windows 10 专业版 64 位操作系统, 基于 x64 的处理器 版本 101.0.4951.41(正式版本) (64 位)
二.问题描述
某天启动谷歌浏览器Chrome的时候出错了,报错内容如下:应用程序无法启动,因为应用程序的并行配置不正确
image-20220419201145649
三.解决方法
打开chrome.exe的目录
C:\Users\Administrator\AppData\Local\Google\Chrome\Application
可以看到文件下面有new_chrome.exe ,点击这个可执行文件即可解决
image-20220419201338160
最后只有chrome.exe没有new_chrome.exe,现在打开谷歌浏览器Chrome就正常了
image-20220627204853767
致力于一条龙式的为您解决问题背景
近期由于项目中需要,所以需要通过Feign封装一个对Harbor操作的sdk信息。
在调用的过程中发现,当请求参数中带有"/“时,Feign默认会将”/"当成路径去解析,而不是当成完整的一个参数解析,实例如下
请求路径为:api/v2.0/projects/{projectName}/repositories
注解参数为:@PathVariable(“projectName”)
正常请求为:api/v2.0/projects/test/repositories
异常路径为:api/v2.0/projects/test/pro/repositories
相信细心的同学已经发现上面的差异了,正常的{projectName}中对应的值为test,而异常的却对应为test/pro,所以当异常的请求打到harbor的机器时,被解析为api/v2.0/projects/test/pro/repositories,所以会直接返回404
以上就是背景了,所以接下来我们讨论一下解决方案
解决方案
首先我们知道springboot中默认是带有几种注释参数处理器的
@MatrixVariableParameterProcessor
@PathVariableParameterProcessor
@QueryMapParameterProcessor
@RequestHeaderParameterProcessor
@RequestParamParameterProcessor
@RequestPartParameterProcessor
因为我们的请求参数是在路径中的,所以默认我们会使用@PathVariableParameterProcessor来标识路径参数,而我们需要转义的参数其实也是在路径中,所以我们先来看一下@PathVariableParameterProcessor是如何实现的
public boolean processArgument(AnnotatedParameterProcessor.AnnotatedParameterContext context, Annotation annotation, Method method) {
String name = ((PathVariable)ANNOTATION.cast(annotation)).value();
Util.checkState(Util.emptyToNull(name) != null, “PathVariable annotation was empty on param %s.”, new Object[]{context.getParameterIndex()});
context.setParameterName(name);
MethodMetadata data = context.getMethodMetadata();
String varName = ‘{’ + name + ‘}’;
if (!data.template().url().contains(varName) && !this.searchMapValues(data.template().queries(), varName) && !this.searchMapValues(data.template().headers(), varName)) {
data.formParams().add(name);
}
return true;
}
其实在源码中,springboot并没有做什么神器的事情,就是获取使用了PathVariable注解的参数,然后再将其添加到fromParams中就可以。
看到这里我们是不是可以想到,既然在这里我们可以拿到对应的参数了,那想做什么事情不都是由我们自己来决定了,接下来说干就干,
首先我们声明一个属于自己的注解,
import org.springframework.core.annotation.AliasFor;
import java.lang.annotation.*;
/**
@CreateAt: 2022/6/11 0:46
@ModifyAt: 2022/6/11 0:46
@Version 1.0
*/
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SlashPathVariable {/**
- Alias for {@link #name}.
*/
@AliasFor(“name”)
String value() default “”;
/**
- The name of the path variable to bind to.
- @since 4.3.3
*/
@AliasFor(“value”)
String name() default “”;
/**
- Whether the path variable is required.
Defaults to {@code true}, leading to an exception being thrown if the path
- variable is missing in the incoming request. Switch this to {@code false} if
- you prefer a {@code null} or Java 8 {@code java.util.Optional} in this case.
- e.g. on a {@code ModelAttribute} method which serves for different requests.
- @since 4.3.3
*/
boolean required() default true;
}
声明完注解后,我们就需要来自定义自己的参数解析器了,首先继承AnnotatedParameterProcessor
- Alias for {@link #name}.
import feign.MethodMetadata;
import feign.Util;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.openfeign.AnnotatedParameterProcessor;
import org.springframework.web.bind.annotation.PathVariable;
import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedType;
import java.lang.reflect.Method;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@CreateAt: 2022/6/11 0:36
@ModifyAt: 2022/6/11 0:36
@Version 1.0
*/
public class SlashPathVariableParameterProcessor implements AnnotatedParameterProcessor {private static final Class ANNOTATION=SlashPathVariable.class;
@Override
public Class<? extends Annotation> getAnnotationType() {
return (Class<? extends Annotation>) ANNOTATION;
}@Override
public boolean processArgument(AnnotatedParameterContext context, Annotation annotation, Method method) {
MethodMetadata data = context.getMethodMetadata();
String name = ANNOTATION.cast(annotation).value();
Util.checkState(Util.emptyToNull(name) != null, “SlashPathVariable annotation was empty on param %s.”, new Object[]{context.getParameterIndex()});
context.setParameterName(name);
data.indexToExpander().put(context.getParameterIndex(),this::expandMap);
return true;
}private String expandMap(Object object) {
String encode = URLEncoder.encode(URLEncoder.encode(object.toString(), Charset.defaultCharset()), Charset.defaultCharset());
return encode;
}
}
可以看到上面的代码,我们获取到自定义注解的参数后,将当前参数添加打Param后,并且为当前参数指定自定义的编码格式。
最后,我们再通过Bean的形式将对应的注解添加到容器中
import feign.Contract;
import org.springframework.cloud.openfeign.AnnotatedParameterProcessor;
import org.springframework.cloud.openfeign.support.SpringMvcContract;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
@CreateAt: 2022/6/11 0:48
@ModifyAt: 2022/6/11 0:48
@Version 1.0
*/
@Component
public class SlashBean {@Bean
public Contract feignContract(){
List processors=new ArrayList<>();
processors.add(new SlashPathVariableParameterProcessor());
return new SpringMvcContract(processors);
}
}
最后我们将上面的参数注解PathVariable换成我们自定义的@SlashPathVariable,就大功告成了
最后
通过以上的形式进行注入的话,会注入到Spring全局,所以在使用的过程中需要考虑是否符合场景
西北大学物理习题册答案相关推荐
- 量子物理 詹班 计算机,6量子物理作业答案
<6量子物理作业答案>由会员分享,可在线阅读,更多相关<6量子物理作业答案(4页珍藏版)>请在技术文库上搜索. 1.大学物理(下)大学物理(下) 作业作业 No.6 量子物理量 ...
- 2021考研数学二李永乐660题【习题册+答案册】
2021考研数学二李永乐660题[习题册+答案册] 链接: https://pan.baidu.com/s/1UwoG-YcaTPErCIS3uD8Hyw 提取码: acpf 复制这段内容后打开百度网 ...
- 2021考研数学一李永乐660题【习题册+答案册】
2021考研数学一李永乐660题[习题册+答案册] 链接: https://pan.baidu.com/s/1vtDFGiGtHxJIFGTKPrEbKw 提取码: 423y 复制这段内容后打开百度网 ...
- 重庆理工大学计算机学院学概率论,重庆理工大学概率论与数理统计习题册答案...
重庆理工大学概率论与数理统计习题册答案 习题一一.填空题1. 2. 3. 4. ABC50260二.单项选择题1.B 2.C 3.C 4.A 5.B三.计算题1. (1)略(2)A. B.321 ...
- 合工大c语言考题及答案,合肥工业大学大学物理试题答案
合肥工业大学大学物理试题答案 1. S: (answer) 2. S: (proved c) 3. S: (answer) D: 4. S: = -6 J (answer) 5. S: , (answ ...
- 2021考研数学三李永乐660题【习题册+答案册】
2021考研数学三李永乐660题[习题册+答案册] 链接: https://pan.baidu.com/s/1bXre4sxMMDKtDOts0R2RdA 提取码: pis5 复制这段内容后打开百度网 ...
- 中考计算机试题2018视频,新东方中考专家解析2018北京中考物理试题答案(视频)...
2018全国中考的战役即将打响,向正在拼搏的中考生致敬!新东方中考网小编会在考试结束后及时为各位网友整理2018北京中考物理试题及答案,敬请关注! [解析科目]:中考物理 各位家长.各位同学大家好,我 ...
- c语言设计第六章答案,c语言第六章 循环结构程序设计(习题册答案)
第六章 循环结构程序设计 基础练习(A) 一.选择题 1.C语言中while和do-while循环的主要区别是(A). A) do-while的循环体至少无条件执行一次 B) while的循环控制条件 ...
- 量子物理 詹班 计算机,(电气系计算机系詹班)量子物理作业答案
西南交大峨眉校区大学物理 西南交大峨眉校区<大学物理>(量子物理基础)作业6 (电气.计算机.詹班) 一 选择题 1. 以一定频率的单色光照射在某种金属上,测出其光电流曲线在图中用实线表示 ...
最新文章
- 10分钟搭建你的第一个图像识别模型 | 附完整代码
- ListBox combobox的常用功能
- codeproject网页翻译
- requests模块使用代理
- 006——php字符串中的处理函数(五)
- 初学__Python——Python数据类型之字符串
- sql网站路径php,如何在源码中找出sql语句的位置呢
- 玩转Github —— Octotree Chrome插件
- 为线程命名——prctl
- 【人脸识别】基于matlab GUI PCA人脸识别【含Matlab源码 748期】
- keil软件仿真打印输出配置
- 【北京邮电大学计算机考研资料汇总大全】
- 华为USG6320做双线-基于源地址的策略路由
- os.path -- 常用路径操作
- 秋招一个半月流水账+招银网路科技offer
- mysql constraint primary key_SQL PRIMARY KEY 约束
- calibre 电子书库/电子书管理软件--相关配置
- 『居善地』接口测试 — 11、接口自动化框架的设计与实现(三)
- 校招产品经理面经篇四
- android 漩涡动画,html5 canvas酷炫的粒子漩涡动画特效