✅业务相关报错
首页二级三级分类数据不显示
演示如下:
遇到的问题就是红色框起来的显示不出来。
原因就是catalogLoader.js
中catalog.json
路径问题。改为下图即可。
商品详情-跳转页空白显示
报错现象
问题解决
商品详情页跳转后页面为空白,此时查看控制台,发现就有一个报错为:jd.css 找不到。这个css我们没有用到,所以排除。
再看下服务后,发现cfmall-product
服务控制台报了thymeleaf错误内容:th:src="/static/item/${item.skuInfo.skuDefaultImg}"
其实并不是语法问题,而是多了个路径/static/item/
,将其去掉后,成功将图片渲染出来,其它内容不显示也是如此问题,其实大多数渲染问题在排除语法没有问题后,就是路径存在有误,改正即可。
商品详情-sku组合切换问题
[x] 点击不同sku组合跳转出现异常,待解决
feign.FeignException$NotFound: status 404 reading ThirdPartFeignService#sendCode(String,String)问题解决
1.问题描述
今天再写微服务项目的时候,遇到一个奇葩问题,服务A在调用服务B的时候,出现如下错误(在服务B打断点,断点可以进去,但是报404):
然后我就仔细看了一下自己写的代码
- 调用端-feign接口
- 调用端-调用代码(局部)
- 被调用端-接口
- 被调用端-配置文件
看了一下代码,服务名称和路径都对着,感觉也没错啊,然后我就想着先测试一下接口吧
果然,postman 测试结果也是404,然后就找错误,果然发现了一个问题,
Controller层的注解用的是@Controller,这个注解需要返回相应的视图页面。但是调用端需要的是json数据。此时需要使用@RestController注解替换@Controller。
经过测试,问题完美解决。
认证服务-用户密码登录-后端接收表单错误
Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
报错如下:
异常原因:后端接口API需要的参数格式为json,但我们前端提交的数据格式为form表单。
解决方法
方法一:把@RequestBody去掉,因为此注解表示接收的参数格式为json
方法二:把接口API的参数接收格式修改为接收form表单。
@PostMapping(value = "/login",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
Caused by: com.alibaba.nacos.api.exception.NacosException: endpoint is blank
启动会员服务时报错如下:
com.alibaba.nacos.api.exception.NacosException: java.lang.reflect.InvocationTargetException
at com.alibaba.nacos.api.config.ConfigFactory.createConfigService(ConfigFactory.java:45) ~[nacos-api-1.1.1.jar:na]
at com.alibaba.nacos.api.NacosFactory.createConfigService(NacosFactory.java:43) ~[nacos-api-1.1.1.jar:na]
at com.alibaba.cloud.nacos.NacosConfigProperties.configServiceInstance(NacosConfigProperties.java:346) ~[spring-cloud-alibaba-nacos-config-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at com.alibaba.cloud.nacos.NacosConfigAutoConfiguration.nacosContextRefresher(NacosConfigAutoConfiguration.java:64) [spring-cloud-alibaba-nacos-config-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at com.alibaba.cloud.nacos.NacosConfigAutoConfiguration$$EnhancerBySpringCGLIB$$454ebd21.CGLIB$nacosContextRefresher$1(<generated>) [spring-cloud-alibaba-nacos-config-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at com.alibaba.cloud.nacos.NacosConfigAutoConfiguration$$EnhancerBySpringCGLIB$$454ebd21$$FastClassBySpringCGLIB$$7bbf0169.invoke(<generated>) [spring-cloud-alibaba-nacos-config-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) [spring-core-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363) [spring-context-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at com.alibaba.cloud.nacos.NacosConfigAutoConfiguration$$EnhancerBySpringCGLIB$$454ebd21.nacosContextRefresher(<generated>) [spring-cloud-alibaba-nacos-config-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_151-1-redhat]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_151-1-redhat]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_151-1-redhat]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_151-1-redhat]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) [spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622) [spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:607) [spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1321) [spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1160) [spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) [spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) [spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) [spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) [spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) [spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:845) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877) ~[spring-context-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.1.8.RELEASE.jar:2.1.8.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744) ~[spring-boot-2.1.8.RELEASE.jar:2.1.8.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391) ~[spring-boot-2.1.8.RELEASE.jar:2.1.8.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) ~[spring-boot-2.1.8.RELEASE.jar:2.1.8.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.1.8.RELEASE.jar:2.1.8.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1204) ~[spring-boot-2.1.8.RELEASE.jar:2.1.8.RELEASE]
at com.gyz.cfmall.member.CfmallMemberApplication.main(CfmallMemberApplication.java:17) ~[classes/:na]
Caused by: java.lang.reflect.InvocationTargetException: null
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_151-1-redhat]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_151-1-redhat]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_151-1-redhat]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_151-1-redhat]
at com.alibaba.nacos.api.config.ConfigFactory.createConfigService(ConfigFactory.java:42) ~[nacos-api-1.1.1.jar:na]
... 33 common frames omitted
Caused by: com.alibaba.nacos.api.exception.NacosException: endpoint is blank
at com.alibaba.nacos.client.config.impl.ServerListManager.<init>(ServerListManager.java:154) ~[nacos-client-1.1.1.jar:na]
at com.alibaba.nacos.client.config.http.ServerHttpAgent.<init>(ServerHttpAgent.java:244) ~[nacos-client-1.1.1.jar:na]
at com.alibaba.nacos.client.config.NacosConfigService.<init>(NacosConfigService.java:83) ~[nacos-client-1.1.1.jar:na]
... 38 common frames omitted
原因:没有配置Nacos的命名空间。
解决方法:
在Nacos的管理界面将会员服务的命名空间ID配置到项目服务中,如果没有命名空间就新建一个
微服务端口错乱
问题描述
在微服务项目中,有些模块使用了.yml格式的配置文件,有的使用.properties格式的配置文件,可能会发生项目的端口错乱问题。
例如本项目中发生的错误为:
- 其他服务采用bootstrap.properties格式配置文件,而发生错误的服务
cfmall-ware
采用bootstrap.yml格式,在cfmall-ware
服务启动后发现,服务端口号竟然为cfmall-common
中配置的端口,服务名称注册的也是cfmall-common
。
解决方案
解决方案是统一文件格式。例如统一采用bootstrap.properties
格式配置文件,重新启动IDEA,重新启动所有服务以确保准确无误。
Thymeleaf报空指针异常
报错如下:
EL1007E: Property or field ‘nickname’ cannot be found on null
项目中的写法如下:
解决方法:
增加非空判断,将th:else
改为th:if="${session.loginUser!=null}"
解决Seata报错
问题现象
大多数服务依赖于common服务,而common服务中存在seata依赖,从而导致依赖于common服务的模块不配置file.conf、registry.conf就会报错。
问题解决
排除seata依赖
<dependency>
<groupId>com.gyz.cfmall</groupId>
<artifactId>cfmall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</exclusion>
</exclusions>
</dependency>