java - 在序列化期间对 URL 进行编码/解码的 Jackson 注释或方法?

标签 java scala jackson riak

我想知道在 Jackson 中序列化和反序列化对象时是否有一种简单的 URL 编码/解码方法。这样做的原因是为了确保将在 Riak 中编制索引的传入字段不包含非法字符。

例如我有以下类(在 Scala 中):

case class Client(
  @(JsonProperty@field)("guid")
  @(RiakKey@field)
  val guid: String,

  @(JsonProperty@field)("name")
  @(RiakIndex@field)(name = "name")
    val name: String,

  @(JsonProperty@field)("address")
    val address: String,

  @(JsonProperty@field)("contact")
    val contact: String,

  @(JsonProperty@field)("phone")
    @(RiakIndex@field)(name = "phone")
    val phone: String,

  @(JsonProperty@field)("suspended")
  val suspended: Boolean=false,

  @(JsonProperty@field)("created")
  val created: Date=now,

  @(JsonProperty@field)("updated")
    val updated: Date=now

)

所以在 name 字段中,我可能在作为 Riak 索引一部分的名称之间有一个空格。当我在 Riak 中存储 JSON 对象时会产生以下错误:

Caused by: java.net.URISyntaxException: Illegal character in path at index 82: http://db2.3tierlogic.com:8098:8098/buckets/accounts-client/index/name_bin/Calgary Flames
        at java.net.URI$Parser.fail(URI.java:2810)
        at java.net.URI$Parser.checkChars(URI.java:2983)
        at java.net.URI$Parser.parseHierarchical(URI.java:3067)
        at java.net.URI$Parser.parse(URI.java:3015)
        at java.net.URI.<init>(URI.java:577)
        at java.net.URI.create(URI.java:839)
        ... 105 more

是否有注释或非常简单的 URL 动态编码和解码该字段的方法?

最佳答案

最简单的方法是指定您想使用的序列化器/反序列化器

@JsonSerialize(using=classOf[YourSerializer])
@JsonDeerialize(using=classOf[YourDeserializer])
var customEncodedProperty: String = _

关于java - 在序列化期间对 URL 进行编码/解码的 Jackson 注释或方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14991708/

相关文章:

java - 强制源和目标使用 Java 版本的两种方法

java - 如何从命令行使用 jarjar?

json - 一个领域模型,多个 json View

java - @JsonSerialize/@JsonDeserialize 未使用 Spring MVC 调用

java - Jackson typeId 不包含在生成的 json 中

java - 重用部分流映射和过滤来组成两个不同的结果

java - 随机但每个只能出现一次

java - 尝试根据复选框自动创建子任务。子任务不会被创建,但没有收集到错误

scala - 可以在 Akka FSM 中匹配多个接收到的消息

Java 国际化 - ISO ISO 3166-2(分割 - 例如省或州)或 UN/LOCODE - 库