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

网店网站技术方案和男人人做的网站

网店网站技术方案,和男人人做的网站,佛山网站建设定制开发,怎样做网站的优化工作目录 一、依赖 二、集成Swagger Java Config 三、配置完毕 四、解决方案 彩蛋 想尝鲜#xff0c;坑也多#xff0c;一起入个坑~ 一、依赖 SpringBoot版本#xff1a;2.7.14 Swagger版本#xff1a;3.0.0 dependencygroupIdcom.github.xiaoymin坑也多一起入个坑~ 一、依赖 SpringBoot版本2.7.14 Swagger版本3.0.0 dependencygroupIdcom.github.xiaoymin/groupIdartifactIdknife4j-spring-boot-starter/artifactIdversion3.0.3/version /dependencydependencygroupIdio.springfox/groupIdartifactIdspringfox-boot-starter/artifactIdversion3.0.0/version /dependency 二、集成Swagger Java Config Value(${server.port:8080}) private String port;Value(${server.servlet.context-path:}) private String rootPath;Bean Docket docket(SwaggerProperties properties) {Docket docket new Docket(DocumentationType.OAS_30).apiInfo(apiInfo(properties)).groupName(properties.getGroupName()).select().apis(scanBasePackages(properties.getBasePackage())).paths(PathSelectors.any()).build().globalRequestParameters(globalRequestParameters(properties)).globalResponses(HttpMethod.POST, responses()).globalResponses(HttpMethod.GET, responses()).pathMapping(/);log.info(Swagger3 successfully started: http://{}:{}{}/doc.html, IPUtils.getLocalIP(), port, rootPath);return docket; }Bean public ModelPropertyBuilderPlugin modelPropertyBuilderPlugin() {return new DictPropertyPlugin(); }/*** 构建响应状态码*/ private ListResponse responses() {ListResponse responses new LinkedList();responses.add(new ResponseBuilder().code(S).description(响应成功).build());responses.add(new ResponseBuilder().code(E).description(非S即为响应失败).build());return responses; }private ApiInfo apiInfo(SwaggerProperties properties) {return new ApiInfoBuilder().title(properties.getTitle()).description(properties.getDescription()).license(properties.getLicense()).licenseUrl(properties.getLicenseUrl()).termsOfServiceUrl(properties.getTermsOfServiceUrl()).contact(new Contact(properties.getContact().getName(), properties.getContact().getUrl(), properties.getContact().getEmail())).version(properties.getVersion()).build(); }/*** 自定义请求参数** return - list*/ private ListRequestParameter globalRequestParameters(SwaggerProperties properties) {ListRequestParameter params new ArrayList();properties.getParams().forEach(e - {RequestParameter parameter new RequestParameterBuilder().name(e.getName()).description(e.getDesc()).required(e.isRequired()).in(e.getParamType()).hidden(e.isHidden()).build();params.add(parameter);});return params; }/*** 多包扫描支持扫描的包生成{linkplain Predicate RequestHandler }** param basePackages - 扫描的包*/ private PredicateRequestHandler scanBasePackages(final String... basePackages) {if (basePackages null || basePackages.length 0) {throw new IllegalArgumentException(basePackages不能为空);}PredicateRequestHandler predicate null;for (int i basePackages.length - 1; i 0; i--) {String strBasePackage basePackages[i];if (StrUtil.isNotBlank(strBasePackage)) {PredicateRequestHandler tempPredicate RequestHandlerSelectors.basePackage(strBasePackage);predicate predicate null ? tempPredicate : predicate.or(tempPredicate);}}if (predicate null) {throw new IllegalArgumentException(basePackage配置不正确);}return predicate; } /*** swagger3 自定义展示枚举类型信息*/ public class DictPropertyPlugin implements ModelPropertyBuilderPlugin {private final Logger log LoggerFactory.getLogger(getClass());Overridepublic void apply(ModelPropertyContext ctx) {OptionalBeanPropertyDefinition opt ctx.getBeanPropertyDefinition();opt.ifPresent(bean - {Class? cls bean.getRawPrimaryType();if (IDict.class.isAssignableFrom(cls) Enum.class.isAssignableFrom(cls)) {if (cls.getEnumConstants() null) {return;}try {Field f PropertySpecificationBuilder.class.getDeclaredField(description);f.setAccessible(true);String prefix cls.getSimpleName() ( f.get(ctx.getSpecificationBuilder()) )【;StringJoiner join new StringJoiner(,, prefix, 】);for (IDict?, ? d : (IDict?, ?[]) cls.getEnumConstants()) {join.add(d.getDesc() [ d.getCode() ]- ((Enum?) d).name());}ctx.getSpecificationBuilder().description(join.toString());} catch (Exception e) {log.error(字典值处理失败{}, cls.getName(), e);}}});}Overridepublic boolean supports(DocumentationType type) {return DocumentationType.OAS_30.equals(type);} } properties package com.muchenx.common.swagger.config;import org.springframework.boot.context.properties.ConfigurationProperties; import springfox.documentation.service.ParameterType;import java.util.ArrayList; import java.util.List;ConfigurationProperties(prefix swagger) public class SwaggerProperties {/*** swagger会解析的包路径**/private String basePackage com.muchenx;/*** 分组名*/private String groupName default;/*** 标题**/private String title MuchenX;/*** 描述**/private String description MuchenX Cloud Project supports by Spring Cloud Alibaba;/*** 版本**/private String version v1.0;/*** 许可证**/private String license ;/*** 许可证URL**/private String licenseUrl ;/*** 服务条款URL**/private String termsOfServiceUrl ;/*** host信息**/private String host ;/*** 联系人信息*/private Contact contact new Contact();/*** 自定义参数*/private ListParam params new ArrayList();public String getGroupName() {return groupName;}public void setGroupName(String groupName) {this.groupName groupName;}public String getBasePackage() {return basePackage;}public void setBasePackage(String basePackage) {this.basePackage basePackage;}public String getTitle() {return title;}public void setTitle(String title) {this.title title;}public String getDescription() {return description;}public void setDescription(String description) {this.description description;}public String getVersion() {return version;}public void setVersion(String version) {this.version version;}public String getLicense() {return license;}public void setLicense(String license) {this.license license;}public String getLicenseUrl() {return licenseUrl;}public void setLicenseUrl(String licenseUrl) {this.licenseUrl licenseUrl;}public String getTermsOfServiceUrl() {return termsOfServiceUrl;}public void setTermsOfServiceUrl(String termsOfServiceUrl) {this.termsOfServiceUrl termsOfServiceUrl;}public String getHost() {return host;}public void setHost(String host) {this.host host;}public Contact getContact() {return contact;}public void setContact(Contact contact) {this.contact contact;}public ListParam getParams() {return params;}public void setParams(ListParam params) {this.params params;}public static class Contact {/*** 联系人**/private String name Ian Geng;/*** 联系人url**/private String url www.muchenx.com;/*** 联系人email**/private String email gzhygzgmail.com;public String getName() {return name;}public void setName(String name) {this.name name;}public String getUrl() {return url;}public void setUrl(String url) {this.url url;}public String getEmail() {return email;}public void setEmail(String email) {this.email email;}}public static class Param {// 请求参数名private String name;// 请求参数描述private String desc;/*** 请求参数类型QUERY(query),HEADER(header),PATH(path),* COOKIE(cookie),FORM(form),FORMDATA(formData),BODY(body);*/private ParameterType paramType ParameterType.HEADER;// 请求参数默认值private String defaultValue ;// 是否必填private boolean required false;// 是否隐藏private boolean hidden false;public String getName() {return name;}public void setName(String name) {this.name name;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc desc;}public ParameterType getParamType() {return paramType;}public void setParamType(ParameterType paramType) {this.paramType paramType;}public String getDefaultValue() {return defaultValue;}public void setDefaultValue(String defaultValue) {this.defaultValue defaultValue;}public boolean isRequired() {return required;}public void setRequired(boolean required) {this.required required;}public boolean isHidden() {return hidden;}public void setHidden(boolean hidden) {this.hidden hidden;}} }三、配置完毕 在启动类增加注解开起swaggerspringfox.documentation.oas.annotations.EnableOpenApi 此时控制台报错 Caused by: java.lang.NullPointerException: Cannot invoke org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns() because this.condition is nullat springfox.documentation.spring.web.WebMvcPatternsRequestConditionWrapper.getPatterns(WebMvcPatternsRequestConditionWrapper.java:56) ~[springfox-spring-webmvc-3.0.0.jar:3.0.0]at springfox.documentation.RequestHandler.sortedPaths(RequestHandler.java:113) ~[springfox-core-3.0.0.jar:3.0.0]at springfox.documentation.spi.service.contexts.Orderings.lambda$byPatternsCondition$3(Orderings.java:89) ~[springfox-spi-3.0.0.jar:3.0.0]at java.base/java.util.Comparator.lambda$comparing$77a9974f$1(Comparator.java:473) ~[na:na]at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) ~[na:na]at java.base/java.util.TimSort.sort(TimSort.java:220) ~[na:na]at java.base/java.util.Arrays.sort(Arrays.java:1307) ~[na:na]at java.base/java.util.ArrayList.sort(ArrayList.java:1721) ~[na:na]at java.base/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:392) ~[na:na]at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:na]at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:na]at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:na]at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:na]at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510) ~[na:na]at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na]at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) ~[na:na]at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) ~[na:na]........... 原因是主要出现在Spring Boot 2.6及以后只要是Spring Boot 2.6引入的新PathPatternParser导致的。 四、解决方案 spring官方提及此issuebecause this.condition is null · Issue #28794 · spring-projects/spring-boot · GitHub 但尚未解决issue已关闭。 springfox社区活跃已有大神解决此问题Spring 5.3/Spring Boot 2.4 support · Issue #3462 · springfox/springfox · GitHub 适合的方案如下 1.Path匹配策略切换回ant_path_matcher大多情况此方案可解决 spring.mvc.pathmatch.matching-strategyant_path_matcher 2.若还是不能解决添加如下配置 Bean ic WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier, ServletEndpointsSupplier servletEndpointsSupplier, ControllerEndpointsSupplier controllerEndpointsSupplier, EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsProperties, WebEndpointProperties webEndpointProperties, Environment environment) {ListExposableEndpoint? allEndpoints new ArrayList();CollectionExposableWebEndpoint webEndpoints webEndpointsSupplier.getEndpoints();allEndpoints.addAll(webEndpoints);allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());String basePath webEndpointProperties.getBasePath();EndpointMapping endpointMapping new EndpointMapping(basePath);boolean shouldRegisterLinksMapping this.shouldRegisterLinksMapping(webEndpointProperties, environment, basePath);return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, corsProperties.toCorsConfiguration(), new EndpointLinksResolver(allEndpoints, basePath), shouldRegisterLinksMapping, null); }private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, Environment environment, String basePath) {return webEndpointProperties.getDiscovery().isEnabled() (StringUtils.hasText(basePath) || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT)); } 涉及依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-actuator/artifactIdversion2.7.14/versionscopecompile/scope /dependency dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-actuator-autoconfigure/artifactIdversion2.7.14/versionscopecompile/scope /dependency 配置完重启服务问题解决 彩蛋 swagger3与springboot完整的集成方案已上架欢迎查收彩蛋~
http://www.sadfv.cn/news/335649/

相关文章:

  • 做公关用的网站做任务打字赚钱的网站
  • 做外贸哪些国外网站可以推广网站建设的第一阶段
  • 门户网站建设方案 pptwordpress 产品展示插件
  • 网页游戏网站电影五个网络营销方式
  • 房天下怎样快速做网站潍坊建设银行招聘网站
  • 做科研交流常用的网站后台管理系统模板
  • 网站解析是什么意思关于网站建设的职位
  • 广宏建设集团有限公司网站湛江网站网站建设
  • 营销型网站框架99到家微网站什么做的
  • 心理健康教育网站建设wordpress 文章和tag
  • 扬州网站建设suteng公司年前做网站好处
  • 海外商城网站建设虚拟仪器应用系统的开发平台
  • 开发一个app需要的技术昆明网站建设seo公司哪家好
  • 内蒙古住房和城乡建设厅网站个人注册公司的条件
  • 上海缪斯设计公司的主题文化网站推广优化软件
  • 广州做网站的公司哪家好网站权限怎么弄
  • 项目经理网站开发流程总结格式模板
  • php 网站开发的来源wordpress 建立后台默认用户
  • 做一个网站赚钱吗免费做外贸的网站建设
  • 黄冈网站推广软件视频潍坊推广平台
  • 聚划算网站建设分析深圳企业做网站公司
  • 苏州网站设计强生公司网站建设原则
  • 上海建筑设计公司网站机械网站开发
  • 哪些网站是用python做的富阳做网站方式
  • 儿童主题网站的内容建设wordpress用户系统
  • 成都建设网站那个好wordpress加腾讯云cdn
  • 如何修改网站后台登陆入口路劲男女做暖暖的试看网站大全
  • 网站做显卡评测软件谷歌网站建设
  • 高明网站建设报价作品集怎么做网页
  • 吕梁购物网站开发设计烟台学校网站建设