2013-02-19 93 views
0

我正在和Spring學習REST。我正在使用Maven來處理項目依賴關係。傑克遜版本不兼容?

我使用Spring 3.2.1和Jackson來調用GETPOST。當我使用傑克遜版本1.5.6時,GET工作得很好,我可以看到我的對象的Json版本從GET調用中返回。然而,當我升級到最新版本的傑克遜就不再工作,我得到以下的響應返回...

該請求所標識的資源只能與不接受的特性產生響應的根據請求「接受」頭()。

審查其他問題StackOverflow上似乎有與傑克遜映射和Core版本的問題,但我可以找到自己的項目傑克遜沒有其他的引用,所以我不認爲這是問題所在。

應用程序上下文包含以下...

<mvc:annotation-driven/> 

<context:component-scan base-package="im.poz.springrestserver" /> 

,並在控制器中調用的方法如下:...

@RequestMapping(value = "/clients/{clientid}", method= RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE}) 
@ResponseBody 

public Client getClient(@PathVariable("clientid") int clientId) throws llegalArgumentException { 
    Client client=services.retrieveClientById(clientId); 
    return client; 
} 

@RequestMapping(value = "/clients", method= RequestMethod.POST, produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE}) 
@ResponseBody 
public Client updateClient(@RequestBody Client client) throws IllegalArgumentException { 

    client=services.updateClient(client); 
    return client; 

} 
+0

你能加入一些代碼嗎?核心和映射器是否使用相同的發行版本? – Perception 2013-02-19 11:17:33

+0

是的,相同的版本。 Maven似乎處理這個罰款,我已經檢查。 – Vicki 2013-02-19 11:31:41

+0

您沒有包含有問題的POST請求。但是,看來你的服務方法接受多種媒體類型。您在發送請求之前是否在客戶端選擇了其中一種媒體類型? – Perception 2013-02-19 11:35:15

回答

1

答案是在構建。

我正在使用IntelliJ Idea 11.1,並且對新版本的Maven POM所作的更改似乎並未反映在部署的映像中,因此更改Jackson版本意味着Jackson實際上完全缺少部署的版本。

我需要修改工件並重新部署。

問題解決。

+0

所以你能夠使用傑克遜2,並得到這個工作?無論我包含哪些不同的jackson庫,我都會繼續收到這個406錯誤。 從技術上講,傑克遜核心應該取代那些較老的mapper-asl依賴關係。要關閉Spring REST並使用Resteasy或Jersey。所有版本2.2.3。你能告訴我你使用的是什麼庫嗎? – 2013-09-23 23:35:10