2013-02-20 3 views
3

Jackson에서 객체를 직렬화 및 비 직렬화 할 때 URL 인코딩/디코딩의 쉬운 방법이 있는지 궁금합니다. 그 이유는 Riak에서 색인을 생성 할 수신 필드에 잘못된 문자가 포함되지 않도록하기 위해서입니다.잭슨 주석 또는 직렬화 중에 URL 인코딩/디코딩 방법?

예를 들어 내가 (스칼라) 다음 클래스가 다음 name 필드에 따라서

case class Client(
    @([email protected])("guid") 
    @([email protected]) 
    val guid: String, 

    @([email protected])("name") 
    @([email protected])(name = "name") 
    val name: String, 

    @([email protected])("address") 
    val address: String, 

    @([email protected])("contact") 
    val contact: String, 

    @([email protected])("phone") 
    @([email protected])(name = "phone") 
    val phone: String, 

    @([email protected])("suspended") 
    val suspended: Boolean=false, 

    @([email protected])("created") 
    val created: Date=now, 

    @([email protected])("updated") 
    val updated: Date=now 

) 

을, 나는 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 인코딩의 아주 간단한 방법이 있는가하고 즉시 해당 필드를 디코딩 : 나는 Riak에서 JSON 객체를 저장하기 위해 갈 때 다음과 같은 오류가 발생합니다?

답변

2

쉬운 방법은 시리얼 라이저는/당신이 사용하고자하는 디시리얼라이저

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

확인 아 아, 그것은 것 간단한 :) 감사합니다 생각하지 않았다 지정하는 것입니다! – crockpotveggies

+0

'JsonSerialize'가 주석 패키지 외부로 옮겨 졌다면 어떨까요? '발견되지 않음 : 컴파일시 JsonSerialize'를 입력하십시오. 내 다른 특수 효과가 제대로 작동하고 있습니다. * 편집 * 2.0에 있지 않을 수도 있습니까? – crockpotveggies

+0

이 com.fasterxml.jackson.databind.annotation에 있어야합니다. maven을 사용하는 경우 jackson-databind 모듈을 포함해야합니다. – jdevelop