运行DSL-JSON示例时出现序列化异常:找不到类的序列化器
解决DSL-JSON找不到序列化器的问题
这个报错的核心原因是:DSL-JSON依赖编译时注解处理器自动生成序列化/反序列化代码,你只添加了核心依赖,却没配置注解处理相关的内容,导致它无法为你的Example$Model类生成对应的序列化器。下面是具体的解决步骤:
1. 完善Maven配置,添加注解处理器
你需要在pom.xml中补充注解处理器依赖,同时配置Maven编译插件启用注解处理:
<dependencies> <!-- 核心DSL-JSON依赖 --> <dependency> <groupId>com.dslplatform</groupId> <artifactId>dsl-json</artifactId> <version>1.9.9</version> <!-- 建议使用最新稳定版 --> </dependency> <!-- 编译时注解处理器,用于生成序列化代码 --> <dependency> <groupId>com.dslplatform</groupId> <artifactId>dsl-json-processor</artifactId> <version>1.9.9</version> <scope>provided</scope> </dependency> </dependencies> <!-- 配置Maven编译插件,确保注解处理器被触发 --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <!-- 根据你的JDK版本调整 --> <target>1.8</target> <!-- 指定注解处理器路径,让Maven在编译时调用它 --> <annotationProcessorPaths> <path> <groupId>com.dslplatform</groupId> <artifactId>dsl-json-processor</artifactId> <version>1.9.9</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build>
2. 给Model类添加注解标记
你的Example$Model类需要添加@CompiledJson注解,告诉注解处理器为它生成序列化逻辑:
package dsl.test; import com.dslplatform.json.CompiledJson; public class Example { // 给内部Model类添加@CompiledJson注解 @CompiledJson public static class Model { private String name; private int age; // 必须添加无参构造方法,DSL-JSON序列化/反序列化需要它 public Model() {} // 可选:全参构造、getter/setter方法 public Model(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } public static void main(String[] args) throws IOException { DslJson<Object> dslJson = new DslJson<>(); Model model = new Model("Alice", 30); ByteArrayOutputStream os = new ByteArrayOutputStream(); // 现在序列化应该可以正常执行了 dslJson.serialize(model, os); System.out.println(new String(os.toByteArray())); } }
3. 重新编译项目
执行mvn clean compile命令,让注解处理器在编译阶段为Model类生成对应的序列化器代码(生成的代码会放在target/generated-sources/annotations目录下)。
常见排查点
- 确认JDK版本和DSL-JSON兼容(建议JDK8及以上)
- 检查
@CompiledJson注解是否正确添加到了需要序列化的类上(包括内部类) - 验证Maven编译插件的注解处理器路径配置是否正确,确保处理器能被正常触发
内容的提问来源于stack exchange,提问作者Alessandro C
相关产品推荐
相关产品推荐

