报错问题 :Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed: java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter] with root cause java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
由于Java 9及之后的版本中移除了javax.xml.bind.DatatypeConverter类引起的。
从Java 9开始,Java开始模块化,并且逐步移除一些不再建议使用的包和类。
javax.xml.bind.DatatypeConverter就是其中之一
有几种方式可以解决这个问题:
-
使用Java 8,该版本依然包含
javax.xml.bind.DatatypeConverter
。 -
如果你坚持使用Java 9或更高版本,你可以直接把JAXB API以依赖的形式添加到你的项目中。Maven的依赖如下:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
目前我使用的JDK17导入该Maven后成功解决问题
3.另外一个选择是使用Java 9及更高版本中推荐的替代品,比如java.util.Base64
。例如,如果你想要进行Base64编码/解码,你可以使用java.util.Base64
。
// 编码
String encoded = Base64.getEncoder().encodeToString("some string".getBytes(StandardCharsets.UTF_8));
// 解码
String decoded = new String(Base64.getDecoder().decode(encoded), StandardCharsets.UTF_8);
希望能对各位有所帮助