2012-11-02 66 views
3

我一直在使用Restlet GA的March 2.2 Snapshot一段時間,並使用Jackson來處理JSON轉換。一切都工作得很好,基本上是無形的。特別是,我甚至從不需要實例化一個objectMapper。我也一直在使用喬達日期時間,這也很好。Restlet + Jackson - 在哪裏註冊模塊

本週,我升級到最新的2.2快照,它使用傑克遜2.0.4(而不是1.9)。在那個傑克遜版本中,對Joda DateTime的支持已經被移到了一個模塊中(傑克遜核心庫之外)。

現在,當我跑我的測試代碼,我得到的線沿線的一個錯誤:

WARNING: Unable to convert a [application/json,UTF-8] representation into an object of class com.fourspires.api.dto.CommitmentDTO 
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "year" (class org.joda.time.DateTime), not marked as ignorable (2 known properties: , "chronology", "millis"]) 
at [Source: [email protected]; line: 1, column: 701] (through reference chain: com.fourspires.api.dto.CommitmentDTO["completeBy"]->org.joda.time.DateTime["year"]) 

,當我嘗試做一個帖子(),它導致415錯誤。

從傑克遜鄉親的回答是,我必須註冊處理轉換如下JodaModule:

ObjectMapper objectMapper = new ObjectMapper(); 
objectMapper.registerModule(new JodaModule()); 

這看起來很簡單,但我不知道在哪裏把這個代碼。我的測試代碼調用:

commitmentsResource = 
    rootClient.getChild(SOME_PATH, CommitmentsResource.class); 
commitmentsClient = ((ClientProxy) commitmentsResource).getClientResource(); 
commitmentsClient.post() 

在服務器端,我有一個接口:

public interface CommitmentsResource { 
    @Get Representation represent(); 
    @Post("json") Representation postJson(CommitmentDTO commitment); 
    @Post("form") Representation postForm(Form commitmentForm); 
} 

然後我有了

@Override 
public final Representation postJson(final CommitmentDTO commitmentDTO) {...} 

@Override 
public final Representation postForm(final Form form) {...} 

所以我不能CommitmentServerResource看看在哪裏插入objectMapper,以便Post()可以被調用。這就像我想設置全局/默認對象映射器,但我不知道在哪裏找到它(或者它是否存在)。

我試着將兩個objectMapper代碼行添加到我的createInboundRoot中,但這似乎沒有什麼區別。

非常感謝您的任何意見,因爲我好像在這裏完全卡住....

回答

1

我只是試着用的Restlet 2.2的最後一個快照(10月發佈的基礎上,傑克遜2.1.0) ,它只適用於我。

+0

去過:http://www.restlet.org/downloads/unstable - 我在「Google App Engine版」中選擇了Zip存檔在lib目錄中,有一個名爲com.fasterxml.jackson_2的目錄1.0和在該目錄中library.xml,我發現: <庫ID =「傑克遜」 ...... 高性能JSON處理器 2.0 這讓我覺得,這是Jackson的2.0.4版本,而不是2.1版本,這讓我覺得我下載了錯誤的Restlet版本。 但我似乎無法找到更新的。 –

+0

感謝您使用2.1版本的Jackson上傳Restlet/GAE版本。我還將jackson-datatype-joda-2.1.0.jar添加到我的項目中(因爲joda支持不在2.x中的jackson核心中)。最後,我添加了@JsonSerialize(使用= DateTimeSerializer.class) 爲所有我的getter返回DateTime並修復了我上面的問題(415錯誤和年字段未找到)。 –