在编程中遇到的问题总结

IDEA空包粘黏问题

创建好目录以后会发现idea自动将空包合并在一起了,而且点击设置里面也没有Compact Middle Package

Compact Middle Package如果不在设置的主面板上,则点击Tree Appearance,会发现Compact Middle Package在Tree Appearance里面,然后去掉Compact Middle Package前面的勾选即可展开包

IDEA中解决控制台乱码问题

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼吐泡泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值