我有以下系统:
- 我正在将
MediaType.APPLICATION_JSON_VALUE
从 Spring Controller 发送到我的客户端,反之亦然。 - 我还有待序列化类的导出/导入功能。 JSON 文件是通过使用
ObjectMapper
并利用writeValueAsString
和readValue
方法创建的。我正在读取和写入 json 文件。 - 这两个序列化路径当前都使用相同的序列化器/反序列化器。
我使用 @JsonSerialize
和 @JsonDeserialize
注释来为我的一些对象定义自定义序列化。
我想以不同的方式序列化这些对象以进行导出/导入。
所以我想将序列化器/反序列化器交换为导出/导入任务。像这样的事情:
如果我理解docs正确的是,这两个注释只允许一个 using
类。但我想注册多个序列化器/反序列化器并根据一些条件逻辑使用它们。
最佳答案
您可能希望为服务器和客户端配置两个单独的 ObjectMapper 实例。
服务器模块:
ObjectMapper serverMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(ServerDTO.class, new CustomerFileSerializer());
module.addDeserializer(ServerDTO.class, new CustomerFileDeserializer());
serverMapper.registerModule(module);
ServerDTO serverDto = serverMapper.readValue(jsonInput, ServerDTO.class);
String serialized = serverMapper.writeValueAsString(serverDto);
和
客户端模块:
ObjectMapper clientMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(ClientDTO.class, new CustomerClientSerializer());
module.addDeserializer(ClientDTO.class, new CustomerClientDeserializer());
clientMapper.registerModule(module);
ClientDTO clientDTO = clientMapper.readValue(jsonInput, ClientDTO.class);
String serialized = clientMapper.writeValueAsString(clientDTO);
关于java - 在运行时交换 Jackson 自定义序列化器/反序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69116402/