Jackson - DTO int 到 String 的转换
Jackson - DTO int to String conversion
正在调用另一个服务器的 REST 客户端,该服务器 return 具有以下对象:
public class ObjectOriginal {
private int id;
private String name;
// constructor/getters/setters
}
我需要混淆ID。为此,我使用了一个现有的服务,该服务将 id 转换为生成的唯一字符串,以便调用我的服务的人不知道 REAL id 但仍然可以使用唯一字符串请求有关它的信息。
所以我基本上是想 return 给调用者这个对象:
public class ObjectNew {
private String id;
private String name;
// constructor/getters/setters
}
我是否需要拥有 ObjectOriginalDTO 的副本 + 创建一个 ObjectNew DTO + 创建一个映射器以从一个到另一个。
或者我可以配置 Jackson 将 id 字段反序列化为 String 而不是 int 吗?
您可以使用自己的 Serializer/Deserializer 来完成此操作。
你必须实现你的 Serializer/Deserializer 将分别扩展 BeanSerializerModifier/BeanDeserializerModifier
并用它们配置你的模块或者使用注释基础解决方案,如本 tutorial 中所述,有很多参考资料网络这样的事情。那么您将可以更好地控制映射 id
.
的方式
如果您不想使用自定义解串器,您可以使用:
public class ObjectNewDto {
private String id;
private String name;
// constructor/getters/setters
}
和另一个对象:
public class ObjectOriginal {
private int id;
private String name;
// construxtor/getters/settes
}
现在,在验证 ObjectNewDto 之后,您可以通过混淆器服务将其映射到 ObjectOriginal ,然后验证此 Object original 等等...
正在调用另一个服务器的 REST 客户端,该服务器 return 具有以下对象:
public class ObjectOriginal {
private int id;
private String name;
// constructor/getters/setters
}
我需要混淆ID。为此,我使用了一个现有的服务,该服务将 id 转换为生成的唯一字符串,以便调用我的服务的人不知道 REAL id 但仍然可以使用唯一字符串请求有关它的信息。
所以我基本上是想 return 给调用者这个对象:
public class ObjectNew {
private String id;
private String name;
// constructor/getters/setters
}
我是否需要拥有 ObjectOriginalDTO 的副本 + 创建一个 ObjectNew DTO + 创建一个映射器以从一个到另一个。 或者我可以配置 Jackson 将 id 字段反序列化为 String 而不是 int 吗?
您可以使用自己的 Serializer/Deserializer 来完成此操作。
你必须实现你的 Serializer/Deserializer 将分别扩展 BeanSerializerModifier/BeanDeserializerModifier
并用它们配置你的模块或者使用注释基础解决方案,如本 tutorial 中所述,有很多参考资料网络这样的事情。那么您将可以更好地控制映射 id
.
如果您不想使用自定义解串器,您可以使用:
public class ObjectNewDto {
private String id;
private String name;
// constructor/getters/setters
}
和另一个对象:
public class ObjectOriginal {
private int id;
private String name;
// construxtor/getters/settes
}
现在,在验证 ObjectNewDto 之后,您可以通过混淆器服务将其映射到 ObjectOriginal ,然后验证此 Object original 等等...