【发布时间】:2013-02-19 11:14:08
【问题描述】:
我正在使用 Spring 学习 REST。我将 Maven 用于项目依赖项。
我正在使用 Spring 3.2.1 和 Jackson 拨打 GET 和 POST 电话。当我使用 Jackson 的 1.5.6 版时,GET 工作得很好,我可以看到我的对象的 Json 版本从 GET 调用返回。但是,当我升级到更新的 Jackson 版本时,它不再起作用,并且我在响应中返回以下内容......
此请求标识的资源只能生成具有根据请求“接受”标头()不可接受的特征的响应。
查看有关 StackOverflow 的其他问题,Jackson Mapper 和 Core 版本似乎存在问题,但我在我的项目中找不到其他对 Jackson 的引用,所以我认为这不是问题所在。
App 上下文包含以下内容...
<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;
}
【问题讨论】:
-
你能包含一些代码吗?您是否为核心和映射器使用相同的发布版本?
-
是的,相同的版本。 Maven 似乎可以很好地处理这个问题,我已经检查过了。
-
您没有包含有问题的 POST 请求。但是,您的服务方法似乎接受多种媒体类型。在发送请求之前,您是否在客户端选择了其中一种媒体类型?
-
对不起,我有两个问题,但对于这个问题,我关注的是当我更改 Jackson 版本时 GET 停止工作。在客户端,我在标题中设置了“接受应用程序/json”,这适用于 Jackson 1.5.6。 POST 的另一个问题可能是我缺乏使用 Spring/REST/Jackson 的经验,所以在发布问题之前我需要进行更多研究。