✅业务相关报错

gong_yz大约 7 分钟谷粒商城

首页二级三级分类数据不显示

演示如下:

遇到的问题就是红色框起来的显示不出来。

原因就是catalogLoader.jscatalog.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):

然后我就仔细看了一下自己写的代码

  1. 调用端-feign接口
  2. 调用端-调用代码(局部)
  3. 被调用端-接口
  4. 被调用端-配置文件

看了一下代码,服务名称和路径都对着,感觉也没错啊,然后我就想着先测试一下接口吧

果然,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>