IDEA空包粘黏问题
创建好目录以后会发现idea自动将空包合并在一起了,而且点击设置里面也没有Compact Middle Package
Compact Middle Package如果不在设置的主面板上,则点击Tree Appearance,会发现Compact Middle Package在Tree Appearance里面,然后去掉Compact Middle Package前面的勾选即可展开包
IDEA中解决控制台乱码问题
在使用Filter的时候只重写doFilter方法带来的问题
在使用过滤器的时候,xml文件配置都没有问题:
但访问页面的时候(不管是静态的还是动态的),都会报404错误。原因就是因为没有重写Filter里面的init方法。在 web 工程启动的时候执行构造器方法和init 初始化方法 ,如果没有重写过滤器的初始化方法,那么就没法使用过滤器,而xml文件里面有配置了过滤器的信息,所以服务器在执行的时候,根据xml的配置他找MyFilter这个类,发现这个类没有初始化,根本就没有,所以就会报404。
在mapper.xml文件中插入对象的SQL语句遇到的问题
当我们需要在mapper.xml文件中插入对象时,我们可以像下面这样写:
<insert id="addStudent" parameterType="com.example.demo.entity.Student">
insert into student (name,age,school,gender) values(#{name},#{age},#{school},#{gender});
</insert>
上面的parameterType只是使用指定参数类型的,可有可无,没有也不会出错,但是协商以后含义更加明确。
将对象存储到Redis遇到的问题
再将封装好的对象转化为json字符串存储到redis中时,遇到了下面问题
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private ObjectMapper objectMapper;
//登录操作
@RequestMapping("/login")
public Object login(HttpServletRequest req,String username,String password) throws IOException {
if(StringUtils.hasLength(username) && StringUtils.hasLength(password)){
User user = userService.findUserByName(username);
if(user!=null && user.getPassword().equals(password)){
//将登录信息存储到session中
HttpSession session = req.getSession(true);
session.setAttribute("username",username);
//将session持久化到redis中
String sessionStr = objectMapper.writeValueAsString(session);
stringRedisTemplate.opsForValue().set("session",sessionStr);
return 1;
}
}
return -1;
}
}
[org.apache.ibatis.session.defaults.DefaultSqlSession@3e9c5527]
2023-06-11T20:38:19.353+08:00 WARN 21124 --- [nio-8080-exec-5] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.util.Collections$3 and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: org.apache.catalina.session.StandardSessionFacade["servletContext"]->org.apache.catalina.core.ApplicationContextFacade["initParameterNames"])]
警告消息指出在序列化对象时发生了问题,无法找到适当的序列化器。
警告消息的原因是将某个对象序列化为 JSON 格式返回给客户端,但在序列化过程中发现了一个问题。具体来说,异常消息中提到的是找不到合适的序列化器,因为被序列化的对象是 `java.util.Collections$3` 类型,且没有发现属性来创建 `BeanSerializer`。
解决此问题的方法是禁用 Jackson 库在遇到空对象时抛出异常。可以通过在 Spring Boot 的配置文件(如 `application.yml` 或 `application.properties`)中添加以下配置来实现:
spring:
jackson:
serialization:
fail-on-empty-beans: false
或者在 Java 配置类中使用以下代码:
@Configuration
public class JacksonConfig {
@Bean
public Jackson2ObjectMapperBuilderCustomizer customizeJackson() {
return builder -> builder.failOnEmptyBeans(false);
}
}
通过以上配置,可以禁用 Jackson 序列化库在遇到空对象时抛出异常,从而避免警告消息的出现。
请注意,该警告消息可能不会对应用程序的功能造成实质性的影响,因为它只是提醒在序列化过程中发生了一些问题。然而,如果你的应用程序依赖于正确的序列化行为,并且你希望避免警告消息的出现,可以采取上述的配置方法来解决问题。
Unable to connect to Redis server: localhost/127.0.0.1:6379
遇到这个问题很大概率是redis.conf的ip配置没搞好,这是最典型的。但是当我修改了nacos上面业务当中某一项的超时时间时,就出现了这个问题
这一块原先是1秒钟,然后我改成200ms就出现了上面的问题了。原因是这样的,因为这个超时时间的这个业务用到了redis,当项目启动的时候,springBoot就会去检查redis里面的配置,但是由于时间太短,200ms来不及连上redis,所以就会报Unable to connect to Redis server: localhost/127.0.0.1:6379异常,导致项目无法启动。所以只需要将时间设置大点就没事。
引入工具类的时候遇到的问题
在引入别人的工具类的时候,因为自己的项目java版本和他的不一样,导致JVM在加载类的时候报了下面这样的错误:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
解释一下上面的错误:Java运行时无法在运行时找到特定类时发生,即使在编译时存在该类
出现上面错误的原因:
这个问题通常出现在使用Java 9及更高版本时。从Java 9开始,默认情况下,Java开发工具包(JDK)中移除了包括`DatatypeConverter`在内的`javax.xml.bind`包。它是Java API for XML Bind