Jackson序列化期间的URL编码/解码注释或方法?

时间:2013-02-20 23:14:20

标签: 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编码和解码方法?

1 个答案:

答案 0 :(得分:3)

简单的方法是指定您要使用的串行器/解串器

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