4

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フィールドでは、RiakIndexの一部である名前の間にスペースがある場合があります。JSONオブジェクトをRiakに保存しようとすると、次のエラーが発生します。

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エンコードおよびデコードする注釈または非常に簡単な方法はありますか?

4

1 に答える 1

5

簡単な方法は、使用するシリアライザー/デシリアライザーを指定することです

@JsonSerialize(using=classOf[YourSerializer])
@JsonDeerialize(using=classOf[YourDeserializer])
var customEncodedProperty: String = _
于 2013-02-20T23:20:27.640 に答える